让android下的Chronometer能正常暂停和继续
16lz
2021-01-24
大家应该都知道,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 希望有其他想法大家可以谈一下
更多相关文章
- java/android计算明天,今天,昨天,后天
- android之定时器AlarmManager .
- Android倒计时定时器CountDownTimer的用法
- android转IOS开发学习计划
- Android(安卓)性能分析工具之TraceView
- Android中Recyclerview或ListView列表条目item中添加倒计时付款(
- android 提升性能总结
- android的XML连续动画
- 闹钟