Android中CountDownTimer 实现倒计时功能

作者:木木木木头脑袋 时间:2022-01-03 00:00:24 

CountDownTimer

CountDownTimer 是android 自带的一个倒计时类,使用这个类可以很简单的实现 倒计时功能

CountDownTimer 的实现方式 


new CountDownTimer(6000,1000) {//第一个参数表示的是倒计时的总时间,第二参数表示的是倒计时的间隔时间。
         @Override
         public void onTick(long millisUntilFinished) {//倒计时的过程
           textView.setText(millisUntilFinished / 1000 + "秒");
         }

@Override
         public void onFinish() {//倒计时结束
           textView.setText("倒计时结束");
         }
       }.start();

实现效果

Android中CountDownTimer 实现倒计时功能

取消计时器

调用 CountDownTimer 的 cancel() 方法,可以为我们取消计时器:但是这个方法,只有在 android 5.0 以上才有效果,在android 5.0 以下并没有效果。如果需要在android 5.0 以下的系统中也使用 cancel,需要我们自己根据 CountDownTimer 源码中的 实现方式,重新实现一下。


 /**
  * Cancel the countdown.
  */
 public synchronized final void cancel() {
   mCancelled = true;
   mHandler.removeMessages(MSG);
 }

private static final int MSG = 1;

// handles counting down
 private Handler mHandler = new Handler() {

@Override
   public void handleMessage(Message msg) {

synchronized (CountDownTimer.this) {
       if (mCancelled) {
         return;
       }

final long millisLeft = mStopTimeInFuture - SystemClock.elapsedRealtime();

if (millisLeft <= 0) {
         onFinish();
       } else if (millisLeft < mCountdownInterval) {
         // no tick, just delay until done
         sendMessageDelayed(obtainMessage(MSG), millisLeft);
       } else {
         long lastTickStart = SystemClock.elapsedRealtime();
         onTick(millisLeft);

// take into account user's onTick taking time to execute
         long delay = lastTickStart + mCountdownInterval - SystemClock.elapsedRealtime();

// special case: user's onTick took more than interval to
         // complete, skip to next interval
         while (delay < 0) delay += mCountdownInterval;

sendMessageDelayed(obtainMessage(MSG), delay);
       }
     }
   }
 };

由于在 android 5.0以上 增加了一个


private boolean mCancelled = false;

所以我们只需要在 5.0 以下的系统中,去掉


if (mCancelled) {
         return;
       }

去掉这个判断即可。

来源:https://segmentfault.com/a/1190000009296018

标签:CountDownTimer,倒计时
0
投稿

猜你喜欢

  • Spring-Data-JPA整合MySQL和配置的方法

    2023-10-29 10:19:41
  • IDEA SpringBoot项目配置热更新的步骤详解(无需每次手动重启服务器)

    2023-11-12 00:22:41
  • Springboot整个Quartz实现动态定时任务的示例代码

    2023-04-12 20:30:02
  • HorizontalScrollView水平滚动控件使用方法详解

    2023-02-19 21:12:27
  • 关于Java中Json的各种处理

    2022-06-12 02:37:48
  • Unity通过脚本创建网格Mesh的方法

    2023-02-26 23:38:00
  • JAVA实现账户取款和存款操作

    2023-08-22 16:31:45
  • IDEA基于支付宝小程序搭建springboot项目的详细步骤

    2021-10-30 22:44:46
  • Spring component-scan XML配置与@ComponentScan注解配置

    2023-07-04 03:37:12
  • Flutter中嵌入Android 原生TextView实例教程

    2023-07-05 02:02:00
  • C#使用Consul集群进行服务注册与发现

    2022-10-17 15:29:44
  • gson对象序列化的示例

    2023-11-25 08:54:28
  • Java swing框架实现的贪吃蛇游戏完整示例

    2021-06-30 13:03:01
  • springboot+log4j.yml配置日志文件的方法

    2023-08-07 11:33:17
  • Java8 CompletableFuture runAsync学习总结submit() execute()等

    2023-05-25 04:13:43
  • C# List<T> Contains<T>()的用法小结

    2021-05-29 11:44:56
  • Java使用反射创建对象示例

    2023-10-14 11:31:44
  • springboot整合shiro实现记住我功能

    2023-07-29 20:21:34
  • Java数据结构之链表、栈、队列、树的实现方法示例

    2021-10-07 10:40:29
  • J2EE Servlet上传文件到服务器并相应显示功能的实现代码

    2023-12-05 16:36:14
  • asp之家 软件编程 m.aspxhome.com