Android倒计时案例展示
1. Handler 与Message方法实现倒计时功能
这个设计思路也是最经常使用的一种设计
比如: 当点击一个button触发事件,在事件中调用 handler的sendMessage的方法。那么在相应的handler的handleMessage中就会接收到这个消息。在这里里面再进行一些逻辑推断,再通过调用handler的 sendMessageDelayed这个延时发送消息的方法进行消息发送,同一时候更新相关的设置信息
- </pre><pre>
- /**
- * 使用handler 与 message方法实现倒计时功能
- */
- /**
- * 倒计时总长
- */
- long totalCount = 6000;
- /**
- * 倒计时时间间隔
- */
- long flag = 1000;
- private void startCountDown4() {
- Message msg = Message.obtain();
- msg.what = 001;
- mhHandler.sendMessage(msg);
- }
- private Handler mhHandler = new Handler() {
- public void handleMessage(android.os.Message msg) {
- if (msg.what == 001) {
- if (totalCount > 0) {
- /**
- * 发送延迟1秒的消息
- */
- Message msg1 = Message.obtain();
- msg1.what = 001;
- mhHandler.sendMessageDelayed(msg1, flag);
- /**
- * 更新显示UI
- */
- textview.setText(totalCount / 1000 + "秒");
- /**
- * 更新倒计时总时间
- */
- totalCount -= flag;
- }
- }
- };
- };
2 使用Handler的post与Runnable结合实现倒计时功能
运行handler.post();方法,方法中传入一个runnable实例对象。会运行 这个实例对象的run方法。在run方法中再进行想着逻辑的推断。然后调用handler.postDelayed方法实例延迟运行相关操作的方法,这里是运行了相同的操作。从而达到实现一个倒计时的功能
- </pre><pre>
- /**
- * 使用handler的post方法与 runnable结合 实现倒计时的功能
- */
- /**
- * 倒计时总长
- */
- long totalCount = 6000;
- /**
- * 倒计时时间间隔
- */
- long flag = 1000;
- public Handler handler = new Handler();
- public Runnable countDownRunn = new Runnable() {
- @Override
- public void run() {
- if (totalCount > 0) {
- handler.postDelayed(countDownRunn, flag);
- totalCount -= flag;
- textview.setText(totalCount / 1000 + "秒");
- }
- }
- };
- public void startCountDown3() {
- handler.post(countDownRunn);
- }
3 使用子线程来实现倒计时
这里通过开启一个子线程,在线程中开启一个while循环,在这个循环中通过调用方法 seytemClock.sleep(time) 使用这个线程堵塞time时间,然后再进行相关的设置,从而达到倒计时的效果
- /**
- * 倒计时总长
- */
- long totalCount = 6000;
- /**
- * 倒计时时间间隔
- */
- long flag = 1000;
- /**
- * 使用子线程实现倒计时的功能
- */
- public void startCountDown2() {
- new Thread() {
- public void run() {
- while (totalCount > 0) {
- /**
- * 设置每隔flag时间间隔运行一次
- */
- SystemClock.sleep(flag);
- /**
- * 更新页面显示时间
- */
- MainActivity.this.runOnUiThread(new Runnable() {
- @Override
- public void run() {
- textview.setText(totalCount / 1000 + "秒");
- }
- });
- totalCount -= flag;
- }
- };
- }.start();
- }
4 使用CountDownTimer类来实现倒计时功能
相对来说使用这个类的设计逻辑比較简单
- /**
- * 使用CountDownTimer 类实现倒计时功能
- */
- public void startCountDown() {
- TimeCount timeCount = new TimeCount(60000, 1000);
- timeCount.start();
- }
- public class TimeCount extends CountDownTimer {
- /**
- *
- * @param millisInFuture
- * 总倒计时时长 单位毫秒
- * @param countDownInterval
- * 倒计时时间间隔 单位毫秒
- */
- public TimeCount(long millisInFuture, long countDownInterval) {
- super(millisInFuture, countDownInterval);
- }
- @Override
- public void onTick(long l) {
- textview.setText(l / 1000 + "秒");
- }
- @Override
- public void onFinish() {
- }
- }
5 使用属性动画的方式来实现倒计时
- /**
- * 使用属性动画的方式来实现
- *
- */
- int totalNumber = 6000;
- private void startCountDown5(){
- final ValueAnimator animator = ValueAnimator.ofInt(0,totalNumber/1000);
- animator.setDuration(totalNumber);
- animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
- @Override
- public void onAnimationUpdate(ValueAnimator animation) {
- Integer value = (Integer) animation.getAnimatedValue();
- /**
- * value 这里获取到的是递增获取到的时间 单位为秒
- *
- */
- textview.setText((totalCount-value*1000)/1000+"秒");
- if (value*1000>(totalCount-1000)) {
- animator.cancel();
- }
- }
- });
- animator.start();
- }
这样的方式实现的效果可能会不佳,只是也不失为一种思路,在使用的时候能够调整ValueAnimator.ofInt()中第二个參数的计算參数
6 .使用 Timer 与TimerTask方式实现
- Timer mSignTimer = new Timer();
- mSignTimer.schedule(new TimerTask() {
- @Override
- public void run() {
- mCurrentTime += 1000;
- getActivity().runOnUiThread(
- new Runnable() {
- public void run() {
- mSignDateTextView.setText(DataUtils
- .getDateYear(mCurrentTime) + "");
- }
- });
- }
- }, 0, 1000);
这里用schedule方法。第一个參数是TimerTask对象,第二个參数表示開始运行前的延时时间(单位是milliseconds。这里定义了0),第三个參数是表示定时运行时间(单位是milliseconds,这里定义了1000)
这里使用的mCurrentTime是系统当前的时间 ,设置schedule的第三个參数为1000,也就是每1秒运行一下这种方法,那么每次运行加1000毫秒。从而实现了计时功能,当然这里使用的不是倒计时的功能。加一些逻辑推断是能够实现倒计时功能的
这里是直接调用Context对象的runOnUiThread方法。在主线程中进行更新Ui上的显示效果
源代码:
Android倒计时案例展示的更多相关文章
- android倒计时(整理)
android倒计时 用到CountDownTimer Android中文API(143) —— CountDownTimer 前言 本章内容android.os.CountDownTime章节,版本 ...
- Winform外包团队 项目案例展示
北京动点飞扬软件开发团队 C# WInform项目案例展示 长年承接WInForm C#项目开发,商业案例欢迎联系我们索取 有相关项目外包定制开发 欢迎联系我们 qq372900288 Tel 139 ...
- WinForm外包公司 WInform外包项目监控案例展示
北京动点飞扬软件开发团队 C# WInform监控项目案例展示 长年承接WInForm C#项目开发,商业案例欢迎联系我们索取 有相关项目外包定制开发 欢迎联系我们 qq372900288 Tel 1 ...
- android json解析及简单例子+Android与服务器端数据交互+Android精彩案例【申明:来源于网络】
android json解析及简单例子+Android与服务器端数据交互+Android精彩案例[申明:来源于网络] android json解析及简单例子:http://www.open-open. ...
- Flex外包公司——Flex案例展示
Flex案例展示 做的mail系统: http://gowebtop.com/webtop/ 在线购书网站 http://book.orzar.net/ eBay购物网站 http://www. ...
- Scala进阶之路-Scala中的枚举用法案例展示
Scala进阶之路-Scala中的枚举用法案例展示 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Scala中的枚举值和Java中的枚举值有点差别,不过使用起来也都差大同小异,我这 ...
- AllJoyn+Android开发案例-android跨设备调用方法
AllJoyn+Android开发案例-android跨设备调用方法 项目须要涉及AllJoyn开源物联网框架.前面主要了解了一些AllJoyn主要的概念.像总线,总线附件,总线对象,总线接口这种概念 ...
- 流媒体协议(RTMP、RTSP、UDP、HTTP、MMS)转换小工具(RTSP转成RTMP案例展示)(转)
源: 流媒体协议(RTMP.RTSP.UDP.HTTP.MMS)转换小工具(RTSP转成RTMP案例展示)
- java基础-多线程应用案例展示
java基础-多线程应用案例展示 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.两只熊,100只蜜蜂,蜜蜂每次生产的蜂蜜量是1,罐子的容量是30,熊在罐子的蜂蜜量达到20的时候 ...
随机推荐
- Django+Nginx+uwsgi搭建自己的博客(五)
在上一篇博文中,向大家介绍了Users App和Index的前端部分的实现,以及前端与Django的通信部分.至此,我们的博客已经具备一个简单的雏形,可以将其部署在本地的服务器上了.目前较为流行的we ...
- openwrt 控制gpio口的方法
利用i2c来控制gpio口 1.编译驱动或者安装驱动 # opkg update # opkg install kmod-i2c-gpio-custom kmod-i2c-core# 加载驱动 # i ...
- jsp有哪些内置对象作用分别是什么 分别有什么方法?
JSP共有以下9个内置的对象: request 用户端请求,此请求会包含来自GET/POST请求的参数 response 网页传回用户端的回应 pageContext 网页的属性是在这里管理 sess ...
- xpath相关巩固
python爬虫xpath的语法 XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML 文档中对元素和属性进行遍历. XPath 是 W3C XSLT 标准的主要元素,并且 ...
- UVA11019 Martix Matcher --- AC自动机
UVA11019 Martix Matcher 题目描述: 给定一个\(n*m\)的文本串 问一个\(x*y\)的模式串出现的次数 AC自动机的奇妙使用 将\(x*y\)的模式串拆分成x个串,当x个串 ...
- [BZOJ4320][ShangHai2006]Homework(根号分治+并查集)
对于<=sqrt(300000)的询问,对每个模数直接记录结果,每次加入新数时暴力更新每个模数的结果. 对于>sqrt(300000)的询问,枚举倍数,每次查询大于等于这个倍数的最小数是多 ...
- 二维数组sort排序
和副本任务完全无关的奇怪感慨: 完全搞不懂我为什么会在搞图论的时候学这种奇怪东西,需要的时候不会,不需要的时候又莫名增加了奇怪的技能点. 之前的假期规划在十多天的放飞自我中彻底泡汤,简单的图论都一点不 ...
- Spring---介绍
核心容器:Core.Beans.Context.EL模块 1. Core模块:封装了框架依赖的最底层部分,包括访问资源.类型转换及一些常用工具类 2. Beans模块:提供了框架的基础 ...
- CDOJ 1314 Hash Perfectly FFT
Hash Perfectly 题目连接: http://acm.uestc.edu.cn/#/problem/show/1314 Description In computing, a hash ta ...
- HDU 5653 Bomber Man wants to bomb an Array. dp
Bomber Man wants to bomb an Array. 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5653 Description ...