干货三:CountDownTimer倒计时工具类
概述
毫无疑问,我们先来看下官方文档中给的介绍
CountDownTimer
官方定义如下:
Schedule a countdown until a time in the future, with regular
notifications on intervals along the way.
同时官方也给出了使用的demo:
构造函数 方法 以及参数含义请参考官方文档,已经很明确的说明了,这里就不重复了~
Code
import android.os.Bundle;
import android.os.CountDownTimer;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;import com.turing.base.R;/*** 倒计时演示* <p/>* Android中有个countDownTimer类,* 从名字上就可以看出来,它的功能是记录下载时间,* 将后台线程的创建和Handler队列封装成为了一个方便的调用.* <p/>* CountDownTimer由系统提供,果断抛弃了自己以前使用Handler更新UI的做法*/
public class CountDownActivity extends AppCompatActivity {private MyCountDownTimer mc;private Button countBtn;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_count_down);countBtn = (Button) findViewById(R.id.show);// 共计30S,1S调用一次onTickmc = new MyCountDownTimer(30000, 1000);mc.start();}public void oncancel(View view) {mc.cancel();}public void restart(View view) {mc.start();}/*** 自定义倒计时类*/class MyCountDownTimer extends CountDownTimer {/*** @param millisInFuture 表示以毫秒为单位 倒计时的总数* <p/>* 例如 millisInFuture=1000 表示1秒* @param countDownInterval 表示 间隔 多少微秒 调用一次 onTick 方法* <p/>* 例如: countDownInterval =1000 ;* 表示每1000毫秒调用一次onTick()*/public MyCountDownTimer(long millisInFuture, long countDownInterval) {super(millisInFuture, countDownInterval);}@Overridepublic void onTick(long millisUntilFinished) {countBtn.setText("倒计时(" + millisUntilFinished / 1000 + ")...");}@Overridepublic void onFinish() {countBtn.setText("done");}}
}
运行图
CountDownTimer源码
/** Copyright (C) 2008 The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with the License.* You may obtain a copy of the License at** http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/package android.os;/*** Schedule a countdown until a time in the future, with* regular notifications on intervals along the way.** Example of showing a 30 second countdown in a text field:** <pre class="prettyprint">* new CountDownTimer(30000, 1000) {** public void onTick(long millisUntilFinished) {* mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);* }** public void onFinish() {* mTextField.setText("done!");* }* }.start();* </pre>** The calls to {@link #onTick(long)} are synchronized to this object so that* one call to {@link #onTick(long)} won't ever occur before the previous* callback is complete. This is only relevant when the implementation of* {@link #onTick(long)} takes an amount of time to execute that is significant* compared to the countdown interval.*/
public abstract class CountDownTimer {/*** Millis since epoch when alarm should stop.*/private final long mMillisInFuture;/*** The interval in millis that the user receives callbacks*/private final long mCountdownInterval;private long mStopTimeInFuture;/*** boolean representing if the timer was cancelled*/private boolean mCancelled = false;/*** @param millisInFuture The number of millis in the future from the call* to {@link #start()} until the countdown is done and {@link #onFinish()}* is called.* @param countDownInterval The interval along the way to receive* {@link #onTick(long)} callbacks.*/public CountDownTimer(long millisInFuture, long countDownInterval) {mMillisInFuture = millisInFuture;mCountdownInterval = countDownInterval;}/*** Cancel the countdown.*/public synchronized final void cancel() {mCancelled = true;mHandler.removeMessages(MSG);}/*** Start the countdown.*/public synchronized final CountDownTimer start() {mCancelled = false;if (mMillisInFuture <= 0) {onFinish();return this;}mStopTimeInFuture = SystemClock.elapsedRealtime() + mMillisInFuture;mHandler.sendMessage(mHandler.obtainMessage(MSG));return this;}/*** Callback fired on regular interval.* @param millisUntilFinished The amount of time until finished.*/public abstract void onTick(long millisUntilFinished);/*** Callback fired when the time is up.*/public abstract void onFinish();private static final int MSG = 1;// handles counting downprivate Handler mHandler = new Handler() {@Overridepublic 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 donesendMessageDelayed(obtainMessage(MSG), millisLeft);} else {long lastTickStart = SystemClock.elapsedRealtime();onTick(millisLeft);// take into account user's onTick taking time to executelong delay = lastTickStart + mCountdownInterval - SystemClock.elapsedRealtime();// special case: user's onTick took more than interval to// complete, skip to next intervalwhile (delay < 0) delay += mCountdownInterval;sendMessageDelayed(obtainMessage(MSG), delay);}}}};
}
干货三:CountDownTimer倒计时工具类相关推荐
- Android复习14【高级编程:推荐网址、抠图片上的某一角下来、Bitmap引起的OOM问题、三个绘图工具类详解、画线条、Canvas API详解(平移、旋转、缩放、倾斜)、矩阵详解】
目 录 推荐网址 抠图片上的某一角下来 8.2.2 Bitmap引起的OOM问题 8.3.1 三个绘图工具类详解 画线条 8.3.16 Canvas API详解(Part 1) 1.transla ...
- Java中 LocalDate、LocalTime、LocalDateTime三个时间工具类的使用介绍
Java中 LocalDate.LocalTime.LocalDateTime三个时间工具类的使用介绍 一.背景: 之前在做项目的过程中,对日期时间类没有一个系统的了解,总是在用的时候去搜索一下,解决 ...
- Android基础入门教程——8.3.1 三个绘图工具类详解
Android基础入门教程--8.3.1 三个绘图工具类详解 标签(空格分隔): Android基础入门教程 本节引言: 上两小节我们学习了Drawable以及Bitmap,都是加载好图片的,而本节我 ...
- 倒计时工具类:PYContDownManager
左边是输出台,右边是tableView,点击后modal了一个控制器,停止了计时器 一.主要功能 对于tableViewCell中,总会碰见有多个cell随机计时的问题,于是写了一个工具类. 里面封装 ...
- 常用工具类 (三) : Hutool 常用工具类整理 (全)
文章目录 官方文档 一.基础工具类 StrUtil / StringUtils 字符串工具类 DateUtil 日期工具类 NumberUtil 数字工具类 BeanUtil JavaBean工具类 ...
- Android倒计时工具类
为什么80%的码农都做不了架构师?>>> 原文地址:http://my.oschina.net/reone/blog/710003 多谢touch_ping 的回应. 原来a ...
- Android生命周期工具类,Android倒计时工具类
多谢touch_ping 的回应. 原来api有这个类 android.os.CountDownTimer , 具体实现很下面的差不多. import android.content.Contex ...
- 三个绘图工具类详解Paint(画笔)Canvas(画布)Path(路径)
1)Paint(画笔): 就是画笔,用于设置绘制风格,如:线宽(笔触粗细),颜色,透明度和填充风格等 直接使用无参构造方法 就可以创建Paint实例: Paint paint = new Paint( ...
- 三个好用的并发工具类
转载自 三个好用的并发工具类 以前的文章中,我们介绍了太多的底层原理技术以及新概念,本篇我们轻松点,了解下 Java 并发包下.基于这些底层原理的三个框架工具类. 它们分别是: 信号量 Semaph ...
最新文章
- Zookeeper watch机制
- 【CVPR2022】双曲图像分割
- Python基本类型-列表
- 用jackson转json_用Jackson编写大JSON文件
- 第4次作业类测试代码 021
- 孟小峰:大数据管理系统的发展与机遇
- 土地覆盖和土地利用的区别
- Linux内核中Netfilter架构介绍
- nginx工作原理与配置
- Java转Ruby【快速入门】
- 论文参考文献格式及意义
- 数组分割 java_分割java数组
- 1.金融点滴 - 什么是做多、做空?国内股市为什么不能做空?
- css中cale()函数的使用
- 多巴胺PEG多巴胺,Dopamine-PEG-Dopamine
- SolidWorks的二次开发有关的自定义函数
- Windows 7 安装最新版 2021-3-1 的 tableau 时提示 “指定程序要求更新的 Windows 版本” 解决办法
- 2021年江苏一级计算机报名时间,江苏2021年3月计算机一级报名时间安排
- 基于JavaEE的IT威客网站管理系统_JSP网站设计_SqlServer数据库设计
- 两片74161实现60进制_74LS161设计60进制计数器-数电课程设计
热门文章
- This tutorial code needs the xfeatures2d contrib module to be run.
- torch 的 unsqueeze用法
- malloc 就是返回开辟内存空间的首地址
- 89. Leetcode 96. 不同的二叉搜索树 (动态规划-基础题)
- 注意力机制~Attention Mechanism
- NTU 课程笔记:CV6422 置信区间
- 线性代数笔记:Khatri-Rao积
- 文巾解题 182. 查找重复的电子邮箱
- 肤色检测算法 - 基于二次多项式混合模型的肤色检测
- Matlab并行编程函数cellfun arrayfun