让android下的Chronometer能正常暂停和继续

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

 

你可能感兴趣的:(android)