Android Chronometer的正常暂停和继续

最近做了个小实验--一个小的计数秒表,实现开始计时,暂停计时,重置的功能。界面如下

界面过于简单,这里就飘过。

 

制作这个秒表主要用到Chronometer类的start()函数,stop()函数,setBase()函数。

查了下源码,这个Chronometer的原理就是先设置一个mBase变量,在类被创建时调用init函数将系统启动后所用掉的时间赋给mBase。源码如下

 

而Chronometer控件显示的时间就是 : 系统启动后所用掉的时间 - mBase

当你想让秒表开始计时就调用start函数,这是Chronometer就会自己刷新时间。

而想暂停就调用stop函数,问题就是一个stop函数,这个stop函数只是停止Chronometer刷新时间,而系统的时间还是在继续计时的。

当你再次调用start函数时,刷新的时间就不是你调用stop函数那一刻的时间,而是从你创建类开始所经过的时间。

而如果想要实现继续功能就需要费电功夫了。

我的实现方法就是,在按下stop时就把当前系统的时间保存起来,当按下开始时重新设置mBase变量,从而使当前显示时间不变并继续计时。

具体代码如下:

 

switch (v.getId()){
            case R.id.btn_start:
                if(!flag){
                    flag = !flag;
                    if(mRecordTime != 0){
                        Chron.setBase(Chron.getBase() + (SystemClock.elapsedRealtime() - mRecordTime));
                    }else{
                        Chron.setBase(SystemClock.elapsedRealtime());
                    }
                    Chron.start();
                }
                break;
            case R.id.btn_stop:
                if(flag){
                    flag = !flag;
                    Chron.stop();
                    mRecordTime = SystemClock.elapsedRealtime();
                }
                break;
            case R.id.btn_reset:
                Chron.stop();
                Chron.setBase(SystemClock.elapsedRealtime());
                mRecordTime = 0;
                flag = false;
                break;
            default: break;
        }

同时还定义了一个boolean的变量,防止因为乱按而使得时间出现错乱。

这次的代码过于简单就不贴源码了。-_-#

posted on 2016-09-22 20:33  风与雷之歌  阅读(3474)  评论(0编辑  收藏  举报

导航