1. 程式人生 > >Android Chronometer(計時器)

Android Chronometer(計時器)

轉自:Android Chronometer(計時器)

android提供了一個計時器元件——Chronometer,繼承自TextView。顯示的是某個時間點開始以及之後的時間增加。
在XML中配置:

 <Chronometer 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

Chronometer的幾個主要的方法:

//開始
mChronometer.start();
//停止
mChronometer.stop();
//設定初始值(重置)
mChronometer.setBase(long base);
//事件監聽器,時間發生變化時可進行操作
mChronometer.setOnChronometerTickListener();
//設定格式(預設"MM:SS"格式)
mChronometer.setFormate("%s");

假設計時器每過10S重置:

mChronometer.setOnChronometerTickListener(new OnChronometerTickListener() {
            
            @Override
            public void onChronometerTick(Chronometer chronometer) {
                //SystemClock.elapsedRealtime()系統當前時間
                //chronometer.getBase()記錄計時器開始時的時間
                if ((SystemClock.elapsedRealtime() - chronometer.getBase()) > 10*1000 ){
                    mChronometer.setBase(SystemClock.elapsedRealtime());
                }
            }
        });

由於Chronometer繼承於TextView,所以如果要設定單獨SS的格式時可以:

int current = 0;

mChronometer.setOnChronometerTickListener(new OnChronometerTickListener() {
            @Override
            public void onChronometerTick(Chronometer chronometer) {
               if (current > 4){
                   current = 0;
                }
                current ++;          
                chronometer.setText(current + "");
            }
});

如果要設定格式為(“HH:MM:SS”)則可以通過演算法去轉換該current:

chronometer.setText(FormatMiss(current));

public static String FormatMiss(int time){     
        String hh=time/3600>9?time/3600+"":"0"+time/3600;
        String mm=(time% 3600)/60>9?(time% 3600)/60+"":"0"+(time% 3600)/60;
        String ss=(time% 3600) % 60>9?(time% 3600) % 60+"":"0"+(time% 3600) % 60;
        return hh+":"+mm+":"+ss;      
    }

順便補充:
Android中的SystemClock類

1、public static long currentThreadTimeMillis () 返在當前執行緒執行的毫秒數。

2、public static long elapsedRealtime () 返回系統啟動到現在的毫秒數,包含休眠時間。

3、public static long elapsedRealtimeNanos () 返回系統啟動到現在的納秒數,包含休眠時間。

4、public static boolean setCurrentTimeMillis (long millis) 設定當前的"牆"時間,要求呼叫程序有許可許可權。返回是否成功。

5、public static void sleep (long ms) 等待給定的時間。和Thread.sleep(millis)類似,但是它不會丟擲InterruptedException異常。事件被推遲到下一個中斷操作。該方法直到指定的時間過去才返回。

6、public static long uptimeMillis () 返回系統啟動到現在的毫秒數,不包含休眠時間。就是說統計系統啟動到現在的非休眠期時間。