Chronometer控件实现计时器

Android计时器实现思路

使用Chronometer控件实现计器的操作。通过设置setBase(long base)来设置初始时间,然后为其添加一个setOnChronometerTickListener(Chronometer.OnChronometerTickListener l)事件来判断时间是否到了,然后再调用其stop()方法实现停止计时。

Android计时器实现代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
private Chronometer duration;
private int miss = 0;
duration.setBase(SystemClock.elapsedRealtime());//计时器清零
duration.setOnChronometerTickListener(
new Chronometer.OnChronometerTickListener() {
@Override
public void onChronometerTick(Chronometer chronometer) {
miss++;
chronometer.setText(FormatMiss(miss));

}
});
duration.start();

//总秒数=> 时分秒
public static String FormatMiss(int miss) {
String hh = miss / 3600 > 9 ? miss / 3600 + "" : "0" + miss / 3600;
String mm = (miss % 3600) / 60 > 9 ? (miss % 3600) / 60 + "" : "0" + (miss % 3600) / 60;
String ss = (miss % 3600) % 60 > 9 ? (miss % 3600) % 60 + "" : "0" + (miss % 3600) % 60;
return hh + ":" + mm + ":" + ss;
}

注意:使用Chronometer计时有个问题:当前显示00:0:10,按HOME键,若干秒后再次回到APP时,会接着从00:0:10开始计时。
在网上查了一下,无法通过设置Chronomete解决这个问题。
一个简单的解决方法是:分别记下在onResume()和onPause()中的系统时间,算出这两个方法间隔的秒数,把这个秒数加到miss上。