大家应该都知道,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 希望有其他想法大家可以谈一下