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




猜你喜欢

转载自blog.csdn.net/Hitourlee/article/details/73992031
今日推荐