Я хочу создать увеличивающий второй таймер как секундомер.
Таким образом, я хочу смочь отобразить секунды и минуты, увеличивая в формате 00:01...
Google только поднимает 24-часовые примеры часов, я задавался вопросом, кто-либо мог запустить меня с примера или учебного руководства того, что я хочу сделать?
Править:
Вот то, что у меня есть использование Хронометра в Android до сих пор
В onCreate ()
secondsT = 0;
elapsedTimeBeforePause = 0;
stopWatch.start();
startTime = SystemClock.elapsedRealtime();
stopWatch.setBase(elapsedTimeBeforePause);
stopWatch.setOnChronometerTickListener(new OnChronometerTickListener(){
@Override
public void onChronometerTick(Chronometer arg0) {
//countUp is a long declared earlier
secondsT = (SystemClock.elapsedRealtime() - arg0.getBase()) / 1000;
String asText = (secondsT / 60) + ":" + (secondsT % 60);
//textGoesHere is a TextView
((TextView)findViewById(R.id.time)).setText(asText);
}
});
В onDestroy ()
@Override
public void onDestroy() {
inCall = false;
elapsedTimeBeforePause = SystemClock.elapsedRealtime() - stopWatch.getBase();
super.onDestroy();
}
Вышеупомянутые компиляции и выполнения, но TextView никогда не увеличивают, это всегда остается в 0, кто-либо может видеть почему?
Я предполагаю, что вы не знаете о Android Chronometer
- в нем уже есть базовая функция секундомера. Вам нужно немного поработать с его особенностями, но несложно заставить его делать то, что вы хотите, как только вы поймете, как он работает.
Существует несколько способов расчета времени на телефоне, но два основных:
"реальное время", например, сейчас, согласно часам моего компьютера, 11:23 утра в Англии. Однако оно может измениться, если мой компьютер свяжется с сервером времени и ему сообщат, что время неверное, или если я путешествовал с ноутбуком и пересек границу часовых поясов. Использование этого метода может привести к хаосу с секундомером, так как измеренное время может измениться в любой момент.
Прошедшее время с момента загрузки" - это количество миллисекунд с момента включения телефона. Это число не имеет никакого отношения к реальному времени, но оно будет вести себя совершенно предсказуемым образом. Вот что использует хронометр Android.
Хронометр Chronometer
- это, по сути, таймер "обратного отсчета", сравнивающий текущее SystemClock.elapsedRealtime()
с elapsedRealtime(), которое было установлено в качестве базового времени. Разница между ними, деленная на 1000, - это количество секунд, прошедших с момента запуска таймера. Однако, если остановить таймер, а затем запустить его снова, вы получите неинтуитивный результат - таймер покажет прошедшее время, как будто он никогда не останавливался. Это происходит потому, что вам необходимо скорректировать его базовое время, чтобы учесть время, когда он был остановлен. Сделать это просто:
// When you're stopping the stopwatch, use this
// This is the number of milliseconds the timer was running for
elapsedTimeBeforePause = SystemClock.elapsedRealtime() - timer.getBase();
// When you're starting it again:
timer.setBase(SystemClock.elapsedRealtime() - elapsedTimeBeforePause);
Edit: Вот полный код базового секундомера, который отображает время в TextView, а не в виджете Chronometer, объявленном в вашем XML-файле.
public class TestProject extends Activity {
TextView textGoesHere;
long startTime;
long countUp;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Chronometer stopWatch = (Chronometer) findViewById(R.id.chrono);
startTime = SystemClock.elapsedRealtime();
textGoesHere = (TextView) findViewById(R.id.textGoesHere);
stopWatch.setOnChronometerTickListener(new OnChronometerTickListener(){
@Override
public void onChronometerTick(Chronometer arg0) {
countUp = (SystemClock.elapsedRealtime() - arg0.getBase()) / 1000;
String asText = (countUp / 60) + ":" + (countUp % 60);
textGoesHere.setText(asText);
}
});
stopWatch.start();
}
}
В вашем main.xml должно быть следующее
<Chronometer android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/chrono"
android:visibility="gone"/>
Несомненно, есть способ заставить Хронометр работать без объявления его в XML-файле, но конструктор Chronometer stopwatch = new Chronometer(this);
не работает должным образом.
Приведенный выше код отображает прошедшее время очень простым способом. Например, если прошло всего 5 секунд, он покажет 0:5
, а не 0:05
, как вы, вероятно, хотите. Исправить это несложно, но я оставлю это на ваше усмотрение! :)
Как насчет этих Цифровых часов .
Но в основном вы сможете найти множество реализаций Java, выполнив поиск в Google по таким ключевым словам, как java, секундомер, цифровые часы, ...
Вы можете взглянуть на Аплет секундомера и при необходимости изменить (К сожалению, здесь нет источника)