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 () 返回系统启动到现在的毫秒数,不包含休眠时间。就是说统计系统启动到现在的非休眠期时间。

猜你喜欢

转载自blog.csdn.net/qq_35008279/article/details/83865506