Chronometer和CountDownTimer计时器

作者: sean_depp | 来源:发表于2018-08-14 10:43 被阅读50次

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


    目录

    • 前言
    • Chronometer的使用
    • CountDownTimer的使用
    • 最后

    前言

    之前在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的使用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("倒计时结束");
        }
    };
    

    最后

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


    相关文章

      网友评论

        本文标题:Chronometer和CountDownTimer计时器

        本文链接:https://www.haomeiwen.com/subject/lwumbftx.html