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();
实现效果
取消计时器
调用 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