正好開發中用到短信驗證這部分,需要用到短信倒計時來控制驗證碼發送頻率,主要功能需求:
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分享地址