實現短信驗證碼獲取倒計時

一般的登錄註冊界面,都會有點擊按鈕發送驗證碼的過程,點擊完成之後註冊按鈕會出現倒計時的字樣。如圖所示:


點擊過程之後會出現倒計時,倒計時時不能點擊,過了倒計時可以重新獲取驗證碼。

首先創建一個類,繼承CountDownTimer類實現構造方法,重寫onTick()以及 onFinish()方法。代碼如下:

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) {
      //這裏的構造方法需要加入一個參數,傳入一個TextView對象參數是爲了對這個TextView對象進行點擊事件的處理。
        // millisInFuture是傳給onTick()的參數,countDownInterval是表示多長時間調用一次onTick()。即倒計時每隔多長時間
        //調用onTick()方法,即倒計時時間每次顯示間隔多少秒。
        super(millisInFuture, countDownInterval);
        mTextView=textView;
    }

    @Override
    public void onTick(long millisUntilFinished) {//該方法在倒計時時調用
        mTextView.setClickable(false); //設置不可點擊
        mTextView.setText(millisUntilFinished / 1000 + "秒後可重新發送");  //設置倒計時時間
        mTextView.setBackgroundResource(R.drawable.bg_identify_code_press); //設置按鈕爲灰色,這時是不能點擊的
        //如果想給按鈕上的字設置顏色可以進行以下操作:
         SpannableString spannableString = new SpannableString(mTextView.getText().toString());  //獲取按鈕上的文字
         ForegroundColorSpan span = new ForegroundColorSpan(Color.RED);//設置文本顏色
        /**
         * public void setSpan(Object what, int start, int end, int flags) {
         * 主要是start跟end,start是起始位置,無論中英文,都算一個。
         * 從0開始計算起。end是結束位置,所以處理的文字,包含開始位置,但不包含結束位置。
         */
        spannableString.setSpan(span, 0, 2, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);//將倒計時的時間設置爲紅色
        mTextView.setText(spannableString);
    }

    @Override
    public void onFinish() {//計時結束之後實現這個方法
        mTextView.setText("重新獲取驗證碼");
        mTextView.setClickable(true);//重新獲得點擊
        mTextView.setBackgroundResource(R.drawable.bg_identify_code_normal);//還原背景色
    }
}
同時,只需要在獲取短信的按鈕下調用該方法即可。

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        CountDownTimerUtils  countDownTimerUtils = new CountDownTimerUtils(button, 20000, 1000);
        countDownTimerUtils .start();
        Toast.makeText(MainActivity.this, "驗證碼已發送", Toast.LENGTH_SHORT).show();
    }
});
相關的解釋都在代碼中顯示了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章