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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的chronometer计时器的代码示例: XML布局文件: ```xml <Chronometer android:id="@+id/chronometer" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="30sp" /> <Button android:id="@+id/start_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Start" /> <Button android:id="@+id/stop_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Stop" /> ``` Java代码: ```java public class MainActivity extends AppCompatActivity { Chronometer chronometer; Button startButton, stopButton; boolean isRunning = false; long elapsedTime = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 获取布局中的控件 chronometer = findViewById(R.id.chronometer); startButton = findViewById(R.id.start_button); stopButton = findViewById(R.id.stop_button); // 设置计时器的格式 chronometer.setFormat("Time: %s"); // 设置开始按钮的点击事件 startButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 如果计时器没有在运行中 if (!isRunning) { // 如果已经有过计时,则先设置起始时间为上次的计时时间 if (elapsedTime != 0) { chronometer.setBase(SystemClock.elapsedRealtime() - elapsedTime); } else { chronometer.setBase(SystemClock.elapsedRealtime()); } chronometer.start(); // 开始计时 isRunning = true; // 更新状态 } } }); // 设置停止按钮的点击事件 stopButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 如果计时器运行中 if (isRunning) { chronometer.stop(); // 停止计时 elapsedTime = SystemClock.elapsedRealtime() - chronometer.getBase(); // 记录已经过去的时间 isRunning = false; // 更新状态 } } }); } } ``` 这个示例中,我们使用了`Chronometer`控件来实现计时器的显示,而按钮则用来控制计时器的开始和停止。`isRunning`变量用来记录计时器是否在运行中,`elapsedTime`则用来记录已经过去的时间。在开始按钮的点击事件中,我们通过`SystemClock.elapsedRealtime()`方法来获取系统当前时间,然后设置为计时器的起始时间;在停止按钮的点击事件中,我们记录当前已经过去的时间,并更新`elapsedTime`变量的值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值