Chronometer用于计时和倒计时的部件
- 常见的方法有:
chronometer.setBase(SystemClock.elapsedRealtime());//设置基准时间,并从该时间开始计数,一般取值为
System.currentTimeMillis();//(当前系统闹钟的纪元时间,毫秒为单位)
SystemClock.elapsedRealtime();//(系统启动到现在的时间,包含设备深度休眠的时间)
SystemClock.uptimeMillis();//(自系统启动时开始计数,毫秒为单位。从系统启动到现在 这个过程中的处于非休眠期的时间。当系统进入深度睡眠时(CPU关闭,设备变黑,等待外部输入装置)该时钟会停止)
chronometer.getBase();//获取当前设置的基准时间
chronometer.setFormat("计时:%s");//设置用于显示的格式化字符串(计时器将根据这个字符串来显示,替换字符串中
第一个“%s”为当前"MM:SS"或 "H:MM:SS"格式的时间显示。)
chronometer.setCountDown(true);//设置为倒计时模式
chronometer.start();//计时开始
chronometer.stop();//停止刷新计时UI更新
- 常用的监听事件
//当计时器时间更改时会触发系统调动
chronometer.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
@Override
public void onChronometerTick(Chronometer chronometer) {
}
});
chronometer暂停后计时连贯的问题:
由于chronometer.stop()方法调用后,top()方法只是停止刷新计时器的时间显示,而并没有真正停止计时。当调用stop()方法后,计时器还在计时,只是不再刷新界面罢了。
- 方法一
//将时间设置为暂停时的时间
chronometer.setBase(convertStrTimeToLong(chronometer.getText().toString()));
chronometer.start();//开始计时
/**
* 将String类型的时间转换成long,如:12:01:08
* @param strTime String类型的时间
* @return long类型的时间
* */
protected long convertStrTimeToLong(String strTime) {
// TODO Auto-generated method stub
String []timeArry=strTime.split(":");
long longTime=0;
if (timeArry.length==2) {//如果时间是MM:SS格式
longTime=Integer.parseInt(timeArry[0])*1000*60+Integer.parseInt(timeArry[1])*1000;
}else if (timeArry.length==3){//如果时间是HH:MM:SS格式
longTime=Integer.parseInt(timeArry[0])*1000*60*60+Integer.parseInt(timeArry[1])
*1000*60+Integer.parseInt(timeArry[0])*1000;
}
return SystemClock.elapsedRealtime()-longTime;
}
- 方法二
private Chronometer recordChronometer;
private long recordingTime = 0;// 记录下来的总时间
public void onRecordStart() {
recordChronometer.setBase(SystemClock.elapsedRealtime() - recordingTime);// 跳过已经记录了的时间,起到继续计时的作用
recordChronometer.start();
}
public void onRecordPause() {
recordChronometer.stop();
recordingTime = SystemClock.elapsedRealtime()- recordChronometer.getBase();// 保存这次记录了的时间
}
public void onRecordStop() {
recordingTime = 0;
recordChronometer.setBase(SystemClock.elapsedRealtime());
}