項目中不可避免的要使用倒計時,之前會用之前一直使用Handler + Runnable來實現,但是自從發現CountDownTimer了後,
發現CountDownTimer挺好用
比如要做一個獲取驗證碼的倒計時
新建CountDownTimerUtils 繼承 CountDownTimer
重寫 onTick()
這個是間隔時間內執行比如說設置1s執行一次 那麼就1秒自己調用一次這個方法
onFinsh()
倒計時完成後調用
完整代碼:
public class CountDownTimerUtils extends CountDownTimer { private TextView mTextView; /** * @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 CountDownTimerUtils(TextView textView, long millisInFuture, long countDownInterval) { super(millisInFuture, countDownInterval); this.mTextView = textView; } @Override public void onTick(long millisUntilFinished) { mTextView.setClickable(false); //設置不可點擊 // mTextView.setText("已發送( " + millisUntilFinished / 1000 + " )"); //設置倒計時時間 mTextView.setText("已發送"); mTextView.setBackgroundResource(R.drawable.shape_gray_solid_gray_stroke_garden); //設置按鈕爲灰色,這時是不能點擊的 // mTextView.setTextColor(Color.WHITE); } @Override public void onFinish() { // mTextView.setText("重新獲取驗證碼"); mTextView.setText("發送驗證碼"); mTextView.setClickable(true);//重新獲得點擊 mTextView.setBackgroundResource(R.drawable.shape_gray_stroke_white_stroke_garden); //還原背景色 } }