Android 短信驗證倒計時控件實現

正好開發中用到短信驗證這部分,需要用到短信倒計時來控制驗證碼發送頻率,主要功能需求:

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分享地址




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