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 不需要积分
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值