Android三种超简单办法,实现按钮倒计时
来源:互联网 发布:怎么在淘宝买小电影 编辑:程序博客网 时间:2024/06/05 05:57
1、使用CountDownTimer
CountDownTimer是android中自带的倒计时类
需要两个参数,一个是总计时的时间,一般验证码是60秒,就是60*1000。第二个参数是设置计时的速度,1000就是每秒一次。
如果总长度是10秒,速度是1,那么就是10-9-8-7-6-5-4-3-2-1-0;
如果总长度是10秒,速度是2,那么就是10-8-6-4-2-0;
总时间是不变的,如果需要更精确的计时展现,就修改第二个参数。
在创建对象的时候,需要重写onTick和onFinish的方法。
onTick就是我们剩余的时间,需要将之转化成秒展示出来。
在倒计时的过程中把按钮禁用。
然后在onFinish倒计时结束的时候,按钮启用。
最后通过.start启动倒计时。
CountDownTimer timer = new CountDownTimer(10000, 1000) { @Override public void onTick(long millisUntilFinished) { mTimer2.setEnabled(false); mTimer2.setText("已发送(" + millisUntilFinished / 1000 + ")"); } @Override public void onFinish() { mTimer2.setEnabled(true); mTimer2.setText("重新获取验证码"); } }.start();
2、使用线程
首先需要创建一个主线程,用来接收数据,改变UI
private int time=10; private Handler mHandler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case 0: setResult(RESULT_OK); TimerButtonActivity.this.finish(); break; case 4: mTimer1.setEnabled(false); mTimer1.setText("已发送(" + String.valueOf(time) + ")"); break; case 5: mTimer1.setEnabled(true); mTimer1.setText("重新获取验证码"); time = 10; break; } } };
运行一个子线程,由于子线程中无法更新UI,所以需要根据time,将当前状态发送到主线程中,在主线程中操作。
当子线程执行的时候,按钮设置不可点击,并且将线程执行的结果一直发送给主线程,在主线程中动态显示倒计时。
当time倒计时为0的时候,将time重置,按钮重新设置可点击。
public void startTime1() { Runnable runnable = new Runnable() { @Override public void run() { time--; if (time <= 0) { mHandler.sendEmptyMessage(5); } else { mHandler.sendEmptyMessage(4); mHandler.postDelayed(this, 1000); } } }; new Thread(runnable).start(); }
3、使用Timer和TimerTask
Timer类官方的解释是多个线程共享一个计时器,也就是当使用了方法二之后,再使用三、线程会比开辟出来一部分给当前的线程。
假设总时间是10秒,点击按钮2,开始倒计时,同时点按钮3,时间会被瓜分掉。
但是只调用一个线程操作是没问题的。
private Timer timer = new Timer();TimerTask task = new TimerTask() { @Override public void run() { runOnUiThread(new Runnable() { @Override public void run() { time--; mTimer3.setText("已发送(" + String.valueOf(time) + ")"); mTimer3.setEnabled(false); if (time <= 0) { mTimer3.setEnabled(true); mTimer3.setText("重新获取验证码"); } } }); } };
在开始的时候调用
timer.schedule(task, time, 1000);
其实还有一些其他的办法:
比如重写Button按钮,同样需要用到线程,只不过,线程是在自定义button中执行。
相比来说第一种方法使用CountDownTimer是最简单的了。
但是具体实现还要看业务上的需求,去寻找最适合的方法。
源码在GitHub-android-CollectionDemo
是一个demo集合,主要存放自己平时练习的项目。
- Android三种超简单办法,实现按钮倒计时
- Android 4.0以上简单实现倒计时按钮
- Android实现倒计时的按钮
- Android实现倒计时的按钮
- Android 倒计时按钮的实现
- Android倒计时简单实现
- 简单Android倒计时实现
- Android实现简单倒计时
- Android倒计时简单方法实现
- Android 简单实现倒计时CountDownTimer
- android倒计时的简单实现
- 简单实现Android倒计时功能
- Android自定义TimeButton实现倒计时按钮
- 简单的倒计时按钮
- JS实现按钮倒计时
- 简单的JS实现按钮触发倒计时功能
- 使用NSTimer计时器实现简单的按钮倒计时功能
- android 按钮倒计时读秒
- 一行代码解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10
- Java读取txt文件和写入txt文件
- 各类数据的序列化以及反序列化的方法(与Java服务器通讯)
- 涨姿势了!数据丢失原来可以这样找回来
- slam整理
- Android三种超简单办法,实现按钮倒计时
- 自己动手搭建React开发环境之四HTMLWebpackPlugin
- Dic排序方法(时间对比),注string,stringbuffer,stringbuilder
- Play framework 流的HTTP响应
- java入门基础编-2-八大基本数据类型
- js保留2位小数
- springmvc上传图片以及nginx+tomcat动静分离
- http请求中application/x-www-form-urlencoded的含义
- Android屏幕适配全攻略(最权威的官方适配指导)