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的變量,防止因為亂按而使得時間出現錯亂。

這次的代碼過於簡單就不貼源碼了。-_-#


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM