2017-02-02 17 views
1

Я пытаюсь реализовать хронометр с часовым минутным и секундным форматом. когда я звоню на остановку, хронометр все еще продолжает подсчитывать время и добавляется к нему, как только я снова зажгу хронометр. Я также не хочу, чтобы хронометр был сброшен, таким образом, только возобновить его.Хронометр все еще работает после вызова остановки?

Это мой код:

на создание: метод

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); 
    } 

ответ

0

Как вы можете прочитать на документации

Stop подсчитывая. Это не влияет на базу, как установлено из 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(); 
    } 
}); 
+0

, но при этом будет только сбросить его. Я не хочу перезагружать хронограф, но только приостанавливаю его, а затем возобновляет – BlueDaBaDee

+0

. Второе редактирование было полезным, я полагался на свою переменную времени, которая была обновлена ​​onChronometerTick, неудивительно, что мой таймер также пошел на отрицательный подсчет до нуля, а затем увеличился, начиная с 0. Большое спасибо за ваше время приятного дня :) – BlueDaBaDee