一、简介:
开发中在用户注册或找回密码之类的功能,经常会遇到获取短信验证码,获取验证码后需要等待1分钟倒计时,这段时间是不能再次发送短信请求的。
效果图:
二、实现步骤:
1、一个关键类:CountDownTimer(Android系统自带的倒计时功能类)
public class CountDownTimerUtils extends CountDownTimer {
private TextView mTextView; //显示倒计时的文字
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.setBackgroundResource(R.drawable.validate_code_press_bg); //设置按钮为灰色,这时是不能点击的
SpannableString spannableString = new SpannableString(mTextView.getText().toString()); //获取按钮上的文字
ForegroundColorSpan span = new ForegroundColorSpan(Color.RED);
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.validate_code_normal_bg); //还原背景色
}
}
2、在合适的地方调用
使用:
CountDownTimerUtils mCountDownTimerUtils = new CountDownTimerUtils(mButton, 60000, 1000); //倒计时1分钟
mCountDownTimerUtils.start();
3、validate_code_press_bg.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!--发送短信验证码按钮被按下-->
<solid android:color="#C0C0C0" /> <!--填充色 透明-->
<corners android:radius="8dp" /> <!-- 圆角 -->
</shape>
validate_code_normal_bg.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!--发送短信验证码按钮未按下-->
<solid android:color="#FF9933" /> <!--填充色 透明-->
<corners android:radius="8dp" /> <!-- 圆角 -->
</shape>
您可能感兴趣的文章:Android账号注册实现点击获取验证码倒计时效果Android实现点击获取验证码倒计时效果Android开发之获取短信验证码后按钮背景变化并且出现倒计时Android短信验证码倒计时验证的2种常用方式Android利用CountDownTimer实现验证码倒计时效果实例Android自定义View获取注册验证码倒计时按钮Android获取验证码倒计时显示效果Android使用Kotlin和RxJava 2.×实现短信验证码倒计时效果Android 用RxBinding与RxJava2实现短信验证码倒计时功能Android获取验证码倒计时实现代码