Хронометр все еще работает после вызова стоп?
Я пытаюсь реализовать хронометр в формате часов, минут и секунд. когда я вызываю стоп, хронометр продолжает отсчитывать время и добавляется к нему, как только я снова запускаю хронометр. Я также не хочу, чтобы хронометр перезагружался, поэтому только возобновляю его.
Это мой код:
на создание:
Chronometer myChronometer;
long time;
myChronometer =(Chronometer) findViewById(R.id.chronometer);
myChronometer .setOnChronometerTickListener(this);
myChronometer .setBase(SystemClock.elapsedRealtime()+time);
метод хронометра:
@Override
public void onChronometerTick(Chronometer cArg) {
time = SystemClock.elapsedRealtime() - cArg.getBase();
int h = (int)(time /3600000);
int m = (int)(time - h*3600000)/60000;
int s= (int)(time - h*3600000- m*60000)/1000 ;
String hh = h < 10 ? "0"+h: h+"";
String mm = m < 10 ? "0"+m: m+"";
String ss = s < 10 ? "0"+s: s+"";
cArg.setText(hh+":"+mm+":"+ss);
}
1 ответ
Решение
Как вы можете прочитать на документации
Хватит считать. Это не влияет на базу, установленную из setBase(long), только на отображение вида.
Таким образом, вы должны сбросить базу вашего хронометра. На вашей кнопке запуска сделайте:
((Button) findViewById(R.id.start)).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//THIS RESET YOUR CHRONOMETER BASE
myChronometer.setBase(SystemClock.elapsedRealtime());
myChronometer.start();
}
});
Если вы хотите сделать паузу и возобновить работу хронометра, вы должны отслеживать время, прошедшее с момента щелчка паузы, а затем установить правильную базу при запуске:
long timeWhenStopped;
((Button) findViewById(R.id.start)).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myChronometer.setBase(SystemClock.elapsedRealtime() + timeWhenStopped);
myChronometer.start();
}
});
((Button) findViewById(R.id.stop)).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myChronometer.stop();
timeWhenStopped = myChronometer.getBase() - SystemClock.elapsedRealtime();
}
});