使用Android CountDownTimer 实现倒计时功能
在Android应用开发当中,我们常常会遇到获取验证码的需求,为了避免出现频繁获取验证码导致服务器资源浪费的情况,则需要在点击获取验证码后实现倒计时的功能。下面就介绍一种简单的实现方法给大家:
- 重写CountDownTimer类
import android.os.CountDownTimer;
public class TimeCount extends CountDownTimer {
Button mTargetBtn;
TextView mTargetText;
public TimeCount(long millisInFuture, long countDownInterval, View targetView) {
// 参数依次为总时长,和计时的时间间隔
super(millisInFuture, countDownInterval);
if (targetView instanceof TextView) {
mTargetText = (TextView) targetView;
}
if (targetView instanceof Button) {
mTargetBtn = (Button) targetView;
}
}
@Override
public void onFinish() {
// 计时完毕时触发
if (mTargetText != null) {
mTargetText.setText(R.string.sms_retake);
mTargetText.setClickable(true);
}
if (mTargetBtn != null) {
mTargetBtn.setText(R.string.sms_retake);
mTargetBtn.setClickable(true);
}
}
@Override
public void onTick(long millisUntilFinished) {
// 计时过程显示
if (mTargetText != null) {
mTargetText.setText(millisUntilFinished / 1000 + " s");
mTargetText.setClickable(false);
}
if (mTargetBtn != null) {
mTargetBtn.setText(millisUntilFinished / 1000 + " s");
mTargetBtn.setClickable(false);
}
}
}
- 初始化组件
@InjectView(R.id.btn_checkcode)
Button btn_checkcode; //获取验证码按钮
private TimeCount timeCount;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_resume_login);
ButterKnife.inject(this);
timeCount = new TimeCount(60000, 1000, btn_checkcode);
}
- 点击按钮开始倒计时
@OnClick({R.id.btn_checkcode})
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn_checkcode:
sendSms();
break;
}
}
private void sendSms() {
...
if (timeCount != null) {
timeCount.start();
}
}
- 运行效果