关于Chronometer(计时器)暂停的问题

问题描述:

当通过stop()方法实现计时器暂停时,在通过start()方法继续计时的时候,会出现计时器显示的时间不是暂停前的时间。

问题分析:

         查看官方API文档可以发现:

publicvoid stop ()

Added in API level 1

Stop countingup. This does not affect the base as set from setBase(long), just the viewdisplay. This stops the messages to the handler, effectively releasing resourcesthat would be held as the chronometer is running, via start().

         stop()方法只是停止刷新计时器的时间显示,而并没有真正停止计时。当调用stop()方法后,计时器还在计时,只是不再刷新界面罢了

         那样怎么才生让计时器在恢复计时的时候能够从暂停前的时间继续计时呢?

下面有两种方法可以解决这个问题:

方法一:

开始和恢复计时:

//将时间设置为暂停时的时间
chronometer.setBase(convertStrTimeToLong(chronometer.getText().toString()));
chronometer.start();//开始计时
 

暂停计时:

 

chronometer.stop();//停止计时   

获取暂停前显示的时间并将其转换为long类型的时间:

/**
 * 将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());
} 

关于Chronometer(计时器)暂停的问题

 

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值