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的时候 ...
随机推荐
- 微信小程序setData()对数组的操作
对于setData普通数据类型而言,没什么讲究 但是对于数组而言,再直接修改一个完整的数组显得有些多余,首先写着不简易,其次效率很是滴. 比如 你都能觉得复杂,官方肯定是有对应的优化的. 官方demo ...
- Bzoj3261/洛谷P4735 最大异或和(可持久化Trie)
题面 Bzoj 洛谷 题解 显然,如果让你查询整个数列的最大异或和,建一颗\(01Trie\),每给定一个\(p\),按照二进制后反方向跳就行了(比如当前二进制位为\(1\),则往\(0\)跳,反之亦 ...
- 备份Kylin的Metadata
元数据是Kylin中最重要的数据之一,备份元数据时运维工作中一个至关重要的环节.只有这样,在由于误操作导致整个Kylin服务或某个Cube异常时,才能将Kylin快速从备份中恢复出来. Kylin组织 ...
- Redis学习篇(三)之Key相关操作
KEYS 作用:返回所有的给定模式的key 语法:KEYS pattern 通配符: *: 任意个字符 ?: 任意一个字符 []: 匹配[]之间的字符 [a-z] [A-Z] \x: 匹配特殊字符 ? ...
- BZOJ2938 POI2000病毒
我们不能让重复过的字串出现在无限串上(就叫这个了...) 也就是要自动机一直能匹配但就是匹配不到,那么就是在自动机上找一个环. dfs判环即可.注意是个有向图. #include<bits/st ...
- 【推导】zoj3981 Balloon Robot
题意:一个桌子有m个位置(首尾相接),有n支队伍坐在其中的n个位置上.有个机器人会从某个起始位置出发,每个时刻会依次发生以下三个事件: 机器人顺时针转一个单位: 某些队伍通过了题目(如果存在): 如果 ...
- zend studio10 创建重复project from remote server
zend studio10创建重复project from remote server [本地远程到dev服务器]1.删掉已存在project隐藏文件.project .build2.如果zend10 ...
- MySQL注射绕过技巧(二)
这次说到注入时空格的过滤 ①注释绕过空格 我们在查看user()的时候需要用到空格 如: select user(): 然后我们用 /**/ 来绕过 ②加号绕过空格(不太建议使用除个别情况) 其实 ...
- Springboot项目与vue项目整合打包
我的环境 * JDK 1.8 * maven 3.6.0 * node环境 1.为什么需要前后端项目开发时分离,部署时合并? 在一些公司,部署实施人员的技术无法和互联网公司的运维团队相比,由于各种不定 ...
- bzoj1798 维护序列
Description 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2 ...