正好开发中用到短信验证这部分,需要用到短信倒计时来控制验证码发送频率,主要功能需求:
1、实现倒计时功能
2、倒计时时获取倒计时控件不能被点击
3、能够方便的获取倒计时控件的结束状态
那么下面我们就可以开始开发了,首先是倒计时工具类,主要捕获点击和完成状态。
public class CountDownTimerUtils extends CountDownTimer {
private CountDownTimerListener mCountDownTimerListener;
private TextView mTextView;
public CountDownTimerUtils(TextView textView, long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
this.mTextView = textView;
}
public CountDownTimerListener getmCountDownTimerListener() {
return mCountDownTimerListener;
}
public void setmCountDownTimerListener(CountDownTimerListener mCountDownTimerListener) {
this.mCountDownTimerListener = mCountDownTimerListener;
}
@Override
public void onTick(long millisUntilFinished) {
mTextView.setClickable(false); // 设置不可点击
mTextView.setText(millisUntilFinished / 1000 + "秒"); // 设置倒计时时间
mTextView.setBackgroundColor(Color.parseColor("#b5b5b6")); // 设置按钮为灰色,这时是不能点击的
}
@Override
public void onFinish() {
mTextView.setText("重发验证码");
mTextView.setClickable(true);// 重新获得点击
mTextView.setBackgroundColor(Color.parseColor("#CB1D0A")); // 还原背景色
mCountDownTimerListener.onFinishedTimerCount(true);
}
}
然后是监听类,用来监听倒计时控件是否结束
public interface CountDownTimerListener {
public void onFinishedTimerCount(boolean success);
}
现在我们就可以用起来
public class MainActivity extends Activity {
private CountDownTimerUtils mCountDownTimerUtils;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv_get_code = (TextView) findViewById(R.id.tv_get_code);
mCountDownTimerUtils = new CountDownTimerUtils(tv_get_code, 5000, 1000);
mCountDownTimerUtils.setmCountDownTimerListener(new CountDownTimerListener() {
@Override
public void onFinishedTimerCount(boolean success) {
Toast.makeText(MainActivity.this, "计时完毕", 2000).show();
}
});
tv_get_code.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mCountDownTimerUtils.start();
}
});
}
}
详细可见上传的demo,欢迎下载学习。这里下载demo Git分享地址