- Chronometer
- Основные методы:
- Обратный отсчёт
- Последний отсчёт
- Показать миллисекунды с помощью Android Chronometer
- Как создать приложение секундомера с помощью Android Studio
- Strings.xml
- activity_stopwatch.xml
- Русские Блоги
- Научите писать простой секундомер на JS (с точностью до 10 мс, без задержки)
- Таймер обратного отсчета JQuery с миллисекундами
- 6 ответов
Chronometer
Компонент Chronometer находился в разделе Date в старых версиях студии. Позволяет пользователю запускать и останавливать начальный отсчёт времени, а также задавать время запуска таймера.
Основные методы:
- start() — запускает отсчёт времени;
- stop() — останавливает отсчёт времени;
- setFormat() — задаёт формат отображения времени. По умолчанию используется формат «MM:SS» или «H:MM:SS». Можно задать свой формат, при этом в строке format первое встреченное «%s», будет заменено на «HH:MM». Например: «Time: %s» будет выводить время «Time: 01:30»
Класс Chronometer имеет интерфейс OnChronometerTickListener.
Поместите на экран активности компонент Chronometer и три кнопки Старт, Стоп, Сброс.
Напишем код для запуска, остановки и сброса секундомера. Весь код сводится обработке щелчков кнопки.
В примере также добавлена реализация OnChronometerTickListener — когда секундомер отсчитает 5 секунд, то появится всплывающее сообщение.
Обратный отсчёт
В API 24 появился новый метод setCountDown(), позволяющий работать в режиме обратного отсчёта. Родственный XML-атрибут для него — android:countDown. Метод isCountDown() позволит узнать, в каком режиме работает хронометр.
Последний отсчёт
Читая документацию, наткнулся на новый метод из API 26 (Android 8.0 Oreo) — isTheFinalCountDown(). Я запустил этот код и чуть не упал со стула от неожиданности — неожиданно в телефоне заиграл видеоролик с песней «The Final Countdown/Последний отсчёт» группы «Европа/Europe». Разработчики развлекаются.
Источник
Показать миллисекунды с помощью Android Chronometer
Я ищу способ сделать Хронометр в Android (желательно 1,6 и выше) показать 10ths секунды при подсчете.
Можно ли сделать это? Если нет, есть ли свободная библиотека (и, желательно, с открытым исходным кодом), которая делает то же самое? В противном случае я напишу свой собственный, но я бы предпочел использовать чужой!
На самом деле, нет. Вы можете передать строку формата, которая показывает десятые доли секунды, но сам Chronometer обновляется каждую секунду. Частота обновления выпекается в коде.
Если нет, есть ли свободная библиотека (и, желательно, с открытым исходным кодом), которая делает то же самое?
Источник Chronometer доступен под лицензией Apache 2.0, поэтому вы можете его изменить. Найдите все вхождения 1000 и измените их на 100 , и вы, вероятно, больше всего там.
Имейте в виду, что этот Chronometer можно использовать в действии, но не в виджетах приложений, поскольку настраиваемые классы View не поддерживаются каркасом виджета приложения.
Виджет по умолчанию хронометра Android не поддерживает миллисекундное форматирование.
Я изменил исходный код виджета хронометра, чтобы показать миллисекунды. Загрузите его из github .
Я нашел путь после много-много исследований. Я не знаю, эффективна она или нет, потому что правда в том, что Эмулятор падает примерно через 10 секунд, но по телефону все работает нормально, и это делает это для меня. Это выглядит примерно так:
Я создал экземпляр класса, который я создал внутри Activity . Этот новый класс был расширением класса Android CountDownTimer (добавьте реализованные методы)
Здесь в конструкторе вы можете добавить продолжительность в миллисекундах, а интервал – 1/10 секунды, то есть 100 миллисекунд. В методе onTick команды выполняются каждые 1 / 100th секунды в течение заданной продолжительности. Это должно сработать.
Источник
Как создать приложение секундомера с помощью Android Studio
В этой статье создается приложение для Android для отображения основного секундомера.
Макет для секундомера включает в себя:
- TextView : показывает, сколько времени прошло
- Три кнопки:
- Старт: чтобы запустить секундомер.
- Стоп: чтобы остановить секундомер.
- Сброс: для сброса секундомера на 00:00:00.
Шаги по созданию секундомера:
- Создайте новый проект для приложения «Секундомер»
- Добавить строковые ресурсы
- Обновите код макета секундомера
- Обновите код активности
Ниже приведены подробные пошаговые инструкции:
- Создайте новый проект для приложения «Секундомер»
- Создайте новый проект Android для приложения с именем «Секундомер» с доменом компании «geeksforgeeks.org», сделав пакет именем org.geeksforgeeks.stopwatch .
Создайте новый проект и выберите Пустое действие
Первый начальный экран
Strings.xml
activity_stopwatch.xml
Мы обновим секундомер, используя созданный нами метод runTimer () . Метод runTimer () будет запускать код каждую секунду, чтобы проверить, работает ли секундомер, и, если это так, увеличивает количество секунд и отображает количество секунд в текстовом представлении.
Чтобы помочь нам в этом, мы будем использовать две частные переменные для записи состояния секундомера. Мы будем использовать int с именем seconds, чтобы отслеживать, сколько секунд прошло с момента запуска секундомера, и логическое значение с именем running, чтобы записать, работает ли секундомер в данный момент.
Мы начнем с написания кода для кнопок, а затем рассмотрим метод runTimer () .
- Добавление кода для кнопок. Когда пользователь нажимает кнопку «Пуск», мы устанавливаем для переменной runningзначение true, чтобы секундомер запустился. Когда пользователь нажимает кнопку «Стоп», мы устанавливаем для бега значение false, чтобы sopwatch перестал работать. Если пользователь нажимает кнопку «Сброс», мы установим для бега значение « ложь», а для секунд — 0, чтобы секундомер был сброшен и перестал работать.
- Метод runTimer () Следующее, что нам нужно сделать, это создать метод runTimer () . Этот метод получит ссылку на текстовое представление в макете; отформатируйте содержимое переменной секунд в часы, минуты и секунды; а затем отобразите результаты в текстовом виде. Если для текущей переменной установлено значение true , она увеличит значение переменной секунд.
- Обработчики позволяют вам планировать код . Handler — это класс Android, который вы можете использовать для планирования кода, который должен быть запущен в какой-то момент в будущем. Вы также можете использовать его для публикации кода, который должен выполняться в другом потоке, чем основной поток Android. В нашем случае мы собираемся использовать обработчик, чтобы запланировать запуск кода секундомера каждую секунду.
Чтобы использовать Handler , вы оборачиваете код, который хотите запланировать, в объект Runnable , а затем используете методы Handle post () и postDelayed (), чтобы указать, когда вы хотите, чтобы код запускался. - Метод post () Методpost () публикует код, который необходимо запустить как можно скорее (обычно это происходит немедленно). Этот метод принимает один параметр — объект типа Runnable . Объект Runnable в Androidville похож на Runnable в простой старой Java: задание, которое вы хотите выполнить. Вы помещаете код, который хотите запустить, в метод Runnable run () , и Handler позаботится о том, чтобы код был запущен как можно скорее.
- Метод postDelayed () МетодpostDelayed () работает аналогично методу post (), за исключением того, что вы используете его для публикации кода, который должен запускаться в будущем. Метод postDelayed () принимает два параметра: Runnable и long . Runnable содержит код, который вы хотите запустить в своем методе run () , а long указывает количество миллисекунд, на которое вы хотите отложить код. Код будет запущен как можно скорее после задержки.
Источник
Русские Блоги
Научите писать простой секундомер на JS (с точностью до 10 мс, без задержки)
Идея изготовления секундомера заключается в следующем:
1. Сначала определите функцию и интерфейс.
Моя цель — сделать самый простой секундомер, поэтому мне нужны только функции запуска, завершения и сброса. Интерфейс показан на рисунке ниже:
2. Способ постижения реализации.
Прежде всего, основным методом должен быть метод setInterval (), который используется для периодического отображения времени. Поскольку я хочу быть точным до 10 мс, я установил временной интервал равным 10.
Кроме того, как увеличить время?
А. Я начал думать о настройке переменных миллисекунд, секунд, минут и часов. Значение milliSeconds увеличивается на 1 каждые 10 мсек. Когда milliSeconds> = 100, используется значение milliSeconds по модулю 100, а значение секунд увеличивается на 1. Точно так же минуты увеличиваются на 1, когда секунды достигают 60, и часы увеличиваются на 1, когда минуты достигают 60.
Однако, чтобы обеспечить единообразие формата (я хочу отображать 02: 01: 24: 06 вместо 2: 1: 24: 6), я изменил четыре переменных на 8 переменных, как и выше. (Код см. В разделе «Секундомер с задержкой» в конце этой страницы).
Однако во время работы возникает проблема задержки, и задержка будет накапливаться. Он может работать более точно, когда время короткое. Поскольку время велико, время на секундомере будет иметь большую ошибку по сравнению со стандартным временем.
Б. Чтобы уменьшить задержку, я разработал другой метод (на самом деле, этот метод имеет большую задержку, чем предыдущий). В настоящее время используется только одна переменная времени для записи количества миллисекунд, прошедших с момента нажатия кнопки запуска (время указывается в единицах 10 мс, а a / b / c / d ниже представляет миллисекунды (10 мс), секунды, минуты и часы). Чтобы добиться единообразия формата, я добавил оператор if.Когда a / b / c / d меньше 10, добавьте перед ним заполнитель 0.
Сравните схему A с B. Поскольку A использует вложенную форму для расчета времени, когда время мало, количество оценок плана A меньше, а эффективность выше; для плана B каждый цикл должен проходить через четыре вычисления. Следовательно, в Когда время короткое, эффективность даже ниже, чем A.
В. Чтобы синхронизировать с реальным временем без ошибок, я придумал другой способ. В объекте Date JS есть метод getTime (), который возвращает количество миллисекунд с 1 января 1970 года. Когда вы нажимаете кнопку «Пуск», запускается getTime (). Используйте это время в качестве эталона и выполняйте getTime () каждые десять миллисекунд. Пусть последний вычитает первое, чтобы получить относительное время. Таким образом, проблема синхронизации с реальным временем полностью решается.
Ниже прилагаются три части кода:
На этот раз я хочу поделиться перечисленными выше вещами. Если есть способ лучше, оставьте сообщение для обсуждения.
Источник
Таймер обратного отсчета JQuery с миллисекундами
У меня есть очень легкая функция, которая отсчитывает от 30 секунд. Я пытался добавить миллисекунды к нему, но я не могу заставить его работать правильно.
6 ответов
Попробуйте таким образом. В любом случае секундомеры отсчитывают только сотые доли секунды.
Первоначальный вопрос состоял в том, чтобы попытаться выяснить, как сделать отображение, похожее на секундомер, и я знаю очень немногих, которые на самом деле считают миллисекунды. При этом здесь является возможным решением для этого. Он основан на обновлении как можно быстрее, и чтобы разница между нашим последним и текущим обновлением оставалась точной.
Проблема в том, что браузер не может обрабатывать манипулирование DOM каждую миллисекунду. По этой причине многие браузеры фактически устанавливают минимальное значение для интервалов — и W3C предлагает минимум 4 мс (источник ). Мы можем использовать эту информацию для создания ограниченного подхода, который выполняется так же быстро насколько это возможно.
Я знаю, что этот пост старый, но я подумал, что должен поделиться своим ответом, может быть, он кому-нибудь поможет. Этот скрипт подсчитывает текущую дату / время с миллисекундами, минутами, секундами, месяцем, днем, годом и суффиксом, его легко изменить, вы можете изменить его на обратный отсчет, если вам нужно
Основываясь на предыдущих ответах, я вывел ванильный javascript, объектно-ориентированный подход.
Я также создал репозиторий github на случай, если кто-то захочет улучшить его.
Вы можете попробовать это. Если вы ориентируетесь на современные браузеры, у вас может быть доступ к API Performance , который дает метки времени с высоким разрешением вместо обычных меток времени.
Улучшенное решение будет использовать requestAnimationFrame() . Обновление DOM каждую миллисекунду, даже если это возможно с помощью setTimeout (), является пустой тратой ресурсов, поскольку браузер обновляет экран, как правило, 60 раз в секунду (каждые 16,6 мс). Обновление часов два или более раз за этот интервал будет бесполезным, и пользователь увидит только последнее значение.
Источник