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的时候 ...
随机推荐
- 洛谷P3950 部落冲突 [LCT]
题目传送门 部落冲突 格式难调,体面就不放了. 分析: julao们应该都看得出来就是个$LCT$板子,战争就$cut$,结束就$link$,询问就$find$.没了... 太久没打$LCT$,然后发 ...
- shell sh bash 概念
在shell脚本的开头往往有一句话来定义使用哪种sh解释器来解释脚本.目前研发送测的shell脚本中主要有以下两种方式:(1) #!/bin/sh(2) #!/bin/bash以上两种方式有什么区别? ...
- Xcode 7.0正式版发布了
Xcode 7.0正式版发布了 下载地址:链接: http://pan.baidu.com/s/1FNkPS 密码: ee42 本文由大学霸整理,转载请注明出处,尊重IT人!
- 深入理解javascript作用域系列第二篇
前面的话 大多数时候,我们对作用域产生混乱的主要原因是分不清楚应该按照函数位置的嵌套顺序,还是按照函数的调用顺序进行变量查找.再加上this机制的干扰,使得变量查找极易出错.这实际上是由两种作用域工作 ...
- XPath中的text()和string()区别(转)
原文地址 : http://blog.csdn.net/jiangchao858/article/details/63314426 本质区别 text()是一个node test,而string()是 ...
- SDOI 2017 Round1 解题报告
Day 1 T1 数字表格 题目大意 · 求\(\prod\limits_{i=1}^n\prod\limits_{j=1}^mFibonacci(\gcd(i,j))\),\(T\leq1000\) ...
- codevs1081 线段树练习 2<区间修改>
1081 线段树练习 2 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作 1:给区间[a,b]的所有 ...
- 主席树+dfs SPOJ BZOJ2588 Count on a tree
这道题我由于智障错误导致一直错. 在树上建主席树,加上lca思想,很简单. #include<bits/stdc++.h> using namespace std; ; struct no ...
- Codeforces 622 F. The Sum of the k-th Powers
\(>Codeforces \space 622\ F. The\ Sum\ of\ the\ k-th\ Powers<\) 题目大意 : 给出 \(n, k\),求 \(\sum_{i ...
- @SuppressWarning 抑制警告注解
@SuppressWarning 抑制警告注解 Java.lang.SuppressWarnings 是 J2SE5.0中标准的Annotation 之一. 可以标注在类,字段,方法,参数,构造方法, ...