倒计时功能CountDownTimer PK Handler
2016-04-26 10:09
816 查看
每次实现获取短信验证码或者自动刷新倒计时功能的时候,都会习惯性用Handler实现,这两天,发现了一个Android自带的一个倒计时功能类,好开心。分享一下~
首先,先摆一下之前的实现:private int mSecondsCount = 0 ; private final Button mGetMSGCodeBtn; private Handler mHandler= new Handler() { @Override public void dispatchMessage(Message msg) { super.dispatchMessage(msg); if (msg.what == 301) { // 验证码倒计时 mSecondsCount--; if (mSecondsCount <= 0) { //倒计时完毕,记得恢复初始状态,完成相应功能 removeMessages(301); } else { //显示当前倒计秒数的数值 mGetMSGCodeBtn.setText(mSecondsCount + "s"); //进行下一秒的倒计时 sendEmptyMessageDelayed(301, 1000); } } } };
在请求接口成功后只需要调用
mHandler.removeMessages(301);//该功能确保当前handler的301请求处于初始状态 mHandler.sendEmptyMessage(301);//开始倒计时请求
洋洋洒洒写了一堆老代码之后,发现了新大陆。快看~
private class CountDownSeconds extends CountDownTimer { public CountDownSeconds(long millisInFuture, long countDownInterval) {//构造函数需要传入的参数是:总共要倒计时的时间,每个多长时间显示的数值发生变化 super(millisInFuture, countDownInterval); } @Override public void onFinish() { //此处编写倒计时结束的功能(例如恢复控件的初始状态) mGetMSGCodeBtn.setText("获取短信验证码"); } @Override public void onTick(long millisUntilFinished) { //正在倒计时中 mGetMSGCodeBtn.setText((millisUntilFinished / 1000) + "s"); } }
调用的时候,只需要
private CountDownSeconds mCountDownSeconds; if (mCountDownSeconds != null) { mCountDownSeconds.start();//开始倒计时 }else{ mCountDownSeconds = new CountDownSeconds(60 * 1000, 1000); mCountDownSeconds.start(); } if (mCountDownSeconds != null) { mCountDownSeconds.cancel();//取消倒计时,取消后,如果再调用start()方法,则重新(如上设置的时间,就是又从60s开始)倒计时 }
完毕~撒花~
相关文章推荐
- ping命令和telnet命令
- MES总结:CBF.Common 文件Net下的有类型转换
- C/C++字符串和数字互换方案收集(转)
- 设计模式笔记:代理模式
- 提交新的logo到svn
- Adapter的优化使用
- Android布局优化之include、merge、ViewStub的使用
- 使用apache-jMeter出现乱码问题。
- mybatis resultMap 的日期字段无法获取时分秒的问题
- 精准医疗现状分析
- 灰度共生矩阵
- H5知识点大总结勾起你的欲望
- Linux系统安装
- ngrok.cc的使用
- Github Atom开源文本代码编辑器- 由 Github 打造的下一代编程开发利器
- 开篇
- Github Atom开源文本代码编辑器- 由 Github 打造的下一代编程开发利器
- Github Atom开源文本代码编辑器- 由 Github 打造的下一代编程开发利器
- Delta机器人运动学算法编译中遇到的问题
- Openstack虚拟机在线迁移(Live Migration)