大家应该都知道,android中的组件Chronometer的常用方法:start、stop和setBase.

stop()这个方法比较恼人,因为调用他只是不刷新时间罢了,但是在后台时间依然是继续走的,后来发现这个是因为base的原因.

笔者本来想在start的时候记录下当前的SystemClock.elapsedRealtime()

然后在暂停的时候在记录此时的SystemClock.elapsedRealtime()

然后相减,得到差值,在继续时间的时候用当前的SystemClock.elapsedRealtime()减去差值

但是这样做会有偏差和问题....笔者很不解,了解的朋友希望可以给予帮助.

这是笔者的第一次尝试:sub和now和prev在继承Activity的子类中定义 初始值为0.

        start.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {MainActivity.this.start.setEnabled(false);MainActivity.this.pause.setEnabled(true);sub=now-prev;if(sub>0){System.out.println("相隔停止:"+sub/1000);    MainActivity.this.ct.setBase(SystemClock.elapsedRealtime()-sub);}MainActivity.this.ct.start();   //开始计时prev=SystemClock.elapsedRealtime();System.out.println("按下开始:"+prev);}});        pause.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {MainActivity.this.start.setEnabled(true);MainActivity.this.pause.setEnabled(false);    MainActivity.this.ct.stop();   //停止计时但是后台还在运行不符合要求 修改一下    now=SystemClock.elapsedRealtime();    System.out.println("按下停止:"+now);}});

思路很简单:记下原来的时间差,然后再继续计时的时候设置一下base,base为当前的时间减去那个时间差。(用System.currentTimeMillis()代替给now和prev赋值也不行,知道的希望可以告诉我原因,谢谢)

思路相同,以上程序无法使用,然后想干脆直接得到时间罢了

        ct.setFormat("计时:%s");        start.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {MainActivity.this.start.setEnabled(false);MainActivity.this.pause.setEnabled(true);if(sub>0){System.out.println("相隔停止(秒):"+sub/1000);    MainActivity.this.ct.setBase(SystemClock.elapsedRealtime()-sub);}else if(sub==-1){MainActivity.this.ct.setBase(SystemClock.elapsedRealtime());}MainActivity.this.ct.start();   //开始计时}});        pause.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {MainActivity.this.start.setEnabled(true);MainActivity.this.pause.setEnabled(false);    MainActivity.this.ct.stop();   //停止计时但是后台还在运行不符合要求 修改一下    String regex=MainActivity.this.ct.getFormat().replaceAll("[(%s)]", "");    String now=MainActivity.this.ct.getText().toString().replaceAll(regex,"");    String[] time=now.split(":");    sub=Integer.valueOf(time[0])*60+Integer.valueOf(time[1]);    sub*=1000;}});

上网找了找 没发现什么 现在还是初学android 希望有其他想法大家可以谈一下

更多相关文章

  1. java/android计算明天,今天,昨天,后天
  2. android之定时器AlarmManager .
  3. Android倒计时定时器CountDownTimer的用法
  4. android转IOS开发学习计划
  5. Android(安卓)性能分析工具之TraceView
  6. Android中Recyclerview或ListView列表条目item中添加倒计时付款(
  7. android 提升性能总结
  8. android的XML连续动画
  9. 闹钟

随机推荐

  1. Android绘制优化----系统显示原理
  2. android工具之adb monkey
  3. delphi xe 之路(28)Android SDK API 层次
  4. Android与服务器端数据交互(1)
  5. Android libyuv应用系列(二)libyuv在Androi
  6. android消息机制(handler运行机制)解析
  7. Android:模拟器使用命令安装apk
  8. android 再按一次退出程序
  9. Android 桌面角标在各大品牌机型上的实现
  10. 【Android】Android Studio实战快速高效