问题描述:

当通过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());} 


 

更多相关文章

  1. 超详细图文讲解android studio导入第三方类库的方法
  2. Android实现在ServiceManager中加入自定义服务的方法详解
  3. Android命令行/c语言/java设置获取系统属性(getprop/setprop)的
  4. android摄像头采集和预览-第一种方法
  5. android postInvalidateDelayed 方法
  6. Android文本输入框EditText的属性和方法
  7. Android自带的时间空间和日期控件
  8. Android软键盘弹出时把布局顶上去的解决方法

随机推荐

  1. 《Android(安卓)4游戏高级编程(第2版)》书
  2. Android中WebKit的应用
  3. Android模拟 HTTP multipart/form-data
  4. :Android模拟器的基本操作
  5. android:layout_weight
  6. eclipse android 设置及修改生成apk的签
  7. Android之——JNI配置C语言打印Logcat信
  8. Android的线程使用来更新UI----Thread、H
  9. 教你如何修改Android默认字体大小和设置
  10. android两次点击的焦点问题