Android使用Chronometer实现计时器

Android使用Chronometer实现计时器
              不用使用线程搭配Handler,直接使用Chronometer实现计时器,可以开始、暂停、重置计时器。
一、Chronometer是TextView的子类,用法跟一般控件一致,布局很简单直接拖放控件就可以了。


    

    
    
	


二、使用:
通过按钮点击事件来调用Chronometer的相关方法即可。Chronometer timer
1、开始计时:timer.start()
2、暂停计时:timer.stop()
3、重置计时器:timer.setBase(SystemClock.elapsedRealtime());
但是要注意的是点击暂停按钮后,只是表面上的暂停,实际上后台仍旧在继续计时,这时候点击开始按钮会发现时间的变化。

三、原因:首次运行时timer.start()之后 会默认设置timer.setBase(SystemClock.elapsedRealtime());即设置当前时间起开始计时,计算首次运行的time 与 当前时间差额从而达到及时的效果,暂停或停止之后,time不会变,因此计时器实际仍在继续运行。

四、解决办法:
增加变量 boolean falg 初始值为 false,long stopTime 点击暂停时记录当前时间同时将 falg 置为 true, long base 记录计时器的Base时间(即计时起始时间),当再次点击开始按钮,计算当前时间与stopTime之间的差额为 t ,最后 timer.setBase(base+t);即可实现真正意义上的计时器,完成到这一步了,注意在 重置按钮的点击事件里,将 falg 置为 false , 否则会有bug。
详情见以下代码:

private Button btn_start;
	private Button btn_stop;
	private Button btn_reset;
	private Chronometer timer;
	
	long stopTime;
	long base;
	private boolean falg = false;
	
	case R.id.btn_start: {
			if (falg) {
				// 设置开始计时时间
				long t = SystemClock.elapsedRealtime() - stopTime;
				timer.setBase(base + t);
			}
			// 开始记时
			timer.start();
		}
			break;
		case R.id.btn_stop: {
			stopTime = SystemClock.uptimeMillis();
			timer.stop();
			falg = true;
			base = timer.getBase();

		}
			break;
		case R.id.btn_reset: {
			timer.setBase(SystemClock.elapsedRealtime());
			falg = false;
		}
			break;


项目下载地址: http://download.csdn.net/detail/ouyangjiluo/7096461 不需要积分

你可能感兴趣的:(Android)