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上。