使用 CountDownTimer 实现验证码倒计时
2016-04-05 17:14
435 查看
CountDownTime 是android
给我们提供的一个倒计时的类使用这个类避免了我们在代码里写很多冗余的代码 。
源码是这样解说这个类的:
在安排的倒计时里,在时间到来为止,随着时间的间隔去有规律的通知。以下就是源码的说明和用例:
Schedule a countdown until a time in the future, withregular notifications on intervals along the way.
*
Example of showing a 30 second countdown in a text field:
*
new CountDownTimer(30000, 1000) {
*
public void onTick(long millisUntilFinished) {
mTextField.setText(“seconds remaining: ” + millisUntilFinished / 1000);
}
*
public void onFinish() {
mTextField.setText(“done!”);
}
}.start();
`
在源码中最核心的代码就是
hadlerMessager()...... ` /** * Start the countdown. */ public synchronized final CountDownTimer start() { mCancelled = false; if (mMillisInFuture <= 0) { onFinish(); return this; } mStopTimeInFuture = SystemClock.elapsedRealtime() + mMillisInFuture; 在这里发送了一个消息 mHandler.sendMessage(mHandler.obtainMessage(MSG)); return this; }` ` // handles counting down private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { synchronized (CountDownTimer.this) { if (mCancelled) { return; } final long millisLeft = mStopTimeInFuture - SystemClock.elapsedRealtime(); if (millisLeft <= 0) { onFinish(); } else if (millisLeft < mCountdownInterval) { // no tick, just delay until done sendMessageDelayed(obtainMessage(MSG), millisLeft); } else { long lastTickStart = SystemClock.elapsedRealtime(); onTick(millisLeft); // take into account user's onTick taking time to execute long delay = lastTickStart + mCountdownInterval - SystemClock.elapsedRealtime(); // special case: user's onTick took more than interval to // complete, skip to next interval while (delay < 0) delay += mCountdownInterval; sendMessageDelayed(obtainMessage(MSG), delay); } } } };`
其实源码跟我们要写的代码都是差不多的只不过是他给我们做了一个封装而已,可以让我们减少很多代码量。
代码贴:
mAuthCodeTime = new AuthCodeTime(61 * 1000, 1000); mAuthCodeTime.start();//开启倒计时 mAuth_code_bt.setFocusable(false);//设置 buuton 不可获取焦点和不可用 mAuth_code_bt.setEnabled(false); class AuthCodeTime extends CountDownTimer { /** * @param millisInFuture The number of millis in the future from the call * to {@link #start()} until the countdown is done and {@link #onFinish()} * is called. * @param countDownInterval The interval along the way to receive * {@link #onTick(long)} callbacks. */ public AuthCodeTime(long millisInFuture, long countDownInterval) { super(millisInFuture, countDownInterval); } @Override public void onTick(long millisUntilFinished) { mAuth_code_bt.setText(millisUntilFinished / 1000 + "s"); } @Override public void onFinish() { mAuth_code_bt.setText("发送验证码"); mAuth_code_bt.setFocusable(true); mAuth_code_bt.setEnabled(true); } }
Demo 地址
下载地址相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories