Chronometer和CountDownTimer计时器

Android小知识10则(上) Android小知识10则(下) Android用5种方式实现自定义计时器, 哪种才是你的菜? github传送门

前言

之前在Android用5种方式实现自定义计时器, 哪种才是你的菜?的文章中我提到了Chronometer和CountDownTimer计时器, 但是很奇怪, 好像被忽略了, 所以这次单独拎出来发一次好了. Android也是提供了计时器的, 虽然功能比较简单, 但是有些场景下也还是够用的...吗?(手动滑稽) CountDownTimer是倒计时计时器. Chronometer的话, 看怎么用了, 正着倒着都行...吗?(再次滑稽)


Chronometer的使用

礼貌性给下官方文档. 然后上效果图:

Chronometer的使用

mTimer.setBase(-60000 + SystemClock.elapsedRealtime());
mTimer.setCountDown(false);
mTimer.start();

我们以+1m(也就是从1分钟开始计时)为例:

  • 先看xml代码, android:format="%s"是要点, 后面会说. 然后它继承自TextView, 属性设置什么的就很简单了:
<Chronometer
    android:id="@+id/timer"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:layout_margin="@dimen/sixteen_dp"
    android:format="%s"
    android:textColor="@android:color/darker_gray"
    android:textSize="@dimen/thirty_sp" />

  • (-60000 + SystemClock.elapsedRealtime())的出现会让你一下子懵了, 所以先说SystemClock.elapsedRealtime(). Chronometer实例是需要设置基线的, 然后用SystemClock.elapsedRealtime()减去你设置的基线值, 换句话说, 如果你写mTimer.setBase(SystemClock.elapsedRealtime());就意味着从零开始. 然后单位是ms, 一分钟就是60000ms, 所以想从一分钟开始就是(-60000 + SystemClock.elapsedRealtime())了.
  • mTimer.setCountDown();代表是倒计时还是正常计时, false就是正常计时, true计时倒计时.
  • 你可能会提问, 为什么我没有格式化字符串它也正常显示了. 看xml中的android:format="%s", 这就是代表用默认的格式. 官方文档有这么一段: By default it will display the current timer value in the form "MM:SS" or "H:MM:SS", or you can use setFormat(String) to format the timer value into an arbitrary string. 也就是说默认"MM:SS", 超过1小时"H:MM:SS", 你可以用setFormat(String)设置你的style儿(手动滑稽).
  • 然后mTimer.start();是开始. mTimer.stop();是停止. 这很好理解了.

也许你会觉得它还挺好用, 但事实很残酷, 倒计时的功能要7.0才能使用, 其它的倒是兼容低版本, 但是废了一半了不是. 但是配合CountDownTimer, 意外地解决了麻烦.


CountDownTimer的使用

效果图:

CountDownTimer的使用

这个倒计时类异常好用. 构造函数第一个参数是总时长, 第二个是间隔. onTick是每次变化要执行的动作, onFinish是结束后要执行的动作. mCountDownTimer.start();是开始. mCountDownTimer.cancel();是停止. 完事了, 就这么多内容, 不信去看看官方文档.

private CountDownTimer mCountDownTimer = new CountDownTimer(10000, 1000) {

    @Override
    public void onTick(long millisUntilFinished) {
        String str = "剩余" + (millisUntilFinished / 1000) + "秒";
        mTvTime.setText(str);
    }

    @Override
    public void onFinish() {
        mTvTime.setEnabled(true);
        mTvTime.setText("倒计时结束");
    }
};

最后

喜欢记得点赞哦, 有意见或者建议评论区见, 暗中关注我也是可以的~


本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏做全栈攻城狮

安卓项目-利用Sqlite数据库,开发新闻发布系统

本文章是基于上篇文章基础之上进行深入学习的。程序员带你学习安卓开发-XML文档的创建与解析

20040
来自专栏向治洪

android离线缓存技术

离线缓存是指在有网络的状态下将从服务器获取的网络数据,如Json 数据缓存到本地,在断网的状态下启动APP时读取本地缓存数据显示在界面上,常用的APP(网易新...

47390
来自专栏刘望舒

如何统计Android App启动时间

随着App的逻辑不断庞大,一不注意就会将耗时的操作放置在应用启动过程之中,导致应用启动速度越来越慢,用户体验也越来越差。优化启动速度是几乎所有大型App应用开发...

54350
来自专栏贾鹏辉的技术专栏@CrazyCodeBoy

FileProvider无法获取外置SD卡问题解决方案 | Failed to find configured root that contains

尊重版权,未经授权不得转载 本文出自:贾鹏辉的技术博客(http://www.devio.org) 随着Android版本越来越高,Android官方对...

62480
来自专栏非著名程序员

一键清理应用数据或者清除应用缓存的方法

导语:最近在做一个一键清理应用缓存的功能,做着做着发现挺有意思,总结了两种方法,供大家参考。 ? 一种是退出应用时,清除应用里的缓存数据。这种方法跟在设置里的...

38590
来自专栏Android-JessYan

MVPArms MVP快速集成框架

原文地址: http://www.jianshu.com/p/48e66e879061

1.5K30
来自专栏知识分享

五,ESP8266 TCP服务器多连接(基于Lua脚本语言)

一些时间去准备朋友的元器件了... 接着写,,争取今天写完所有的文章,,因为答应了朋友下周5之前要做好朋友的东西 对于TCP大家在玩AT指令的时候有没有发现客户...

65070
来自专栏移动开发的那些事儿

APP,Activity的启动速度优化

以上打印出了所谓的thisTime和totalTime,thisTime是指当前Activity的启动时间,正常情况下,如果从桌面启动一个Activity,那么...

22530
来自专栏非著名程序员

良心推荐:总结 Android 开发中必备的代码 Review 清单

本文收集了我自己工作以来提交代码前的所有检查点。事实证明,这样能有效提高自己的代码质量和功能的稳定性。所以推荐大家以后每次提交代码前,都可以看下这份 Revie...

24650
来自专栏Android Note

检测Android应用的启动和关闭

35730

扫码关注云+社区

领取腾讯云代金券