Chronometer

简介

官方提供的简易版时间显示控件Google传送门

计时功能

  • 开始计时
chronometer.start()
  • 停止计时
chronometer.stop()
  • 重置时间
chronometer.setBase(SystemClock.elapsedRealtime());
  • 倒计时(暂不建议使用)
chronometer.setBase(SystemClock.elapsedRealtime() + 60 * 1000L);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
   chronometer.setCountDown(true);
}
chronometer.start();

倒计时功能这里只是提供了AndroidN以上使用,并且倒计时结束以后,也没有及时停止(可以通过OnChronometerTickListener来监听时间是否是“00:00”,来进行手动停止),可以用Handler代替或者CountDownTimer。

  • 格式化时间

Chronometer提供了setFormat来格式化时间,不过只能在原有的时间格式上进行文字的添加

chronometer.setFormat("时间不能倒退:%s");
//如果是小于一小时 MM:SS
时间不能倒退:00:00
//如果是一小时以后 H:MM:SS
时间不能倒退:1:00:00
  • 格式化时间 00:00:00
timer.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
            @Override
            public void onChronometerTick(Chronometer chronometer) {
                setFormat(timer);
            }
        });

private void setFormat(Chronometer chronometer){
        int hour = (int) ((SystemClock.elapsedRealtime() - chronometer.getBase()) / 1000 / 60 / 60);
        int minute = (int) ((SystemClock.elapsedRealtime() - chronometer.getBase()) / 1000 / 60) % 60;
        int second = (int) ((SystemClock.elapsedRealtime() - chronometer.getBase()) / 1000) % 60;
        if (hour < 1) {
            if (minute == 59 && second == 59) {
                chronometer.setFormat("0" + "%s");
            } else {
                chronometer.setFormat("0" + String.valueOf(hour) + ":%s");
            }
        } else if (hour < 10) {
            chronometer.setFormat("0" + "%s");
        } else {
            chronometer.setFormat("%s");
        }
 }

59:59到1:00:00的时候,需要提前处理。因为这里是监听后格式化的,所以会慢一步。

  • 测试建议

设置初始时间为系统时间倒退59分钟50秒,就会从59:50开始计时

chronometer.setBase(SystemClock.elapsedRealtime()-59*60*1000L-50*1000L);
    原文作者:积木Blocks
    原文地址: https://www.jianshu.com/p/973fd7b87128
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞