关于Chronometer(计时器)

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());  
}   
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值