实现了短信验证码倒计时功能。
60000表示60秒
1000表示1秒
2表示两位数变红
mCountDownTimerUtils = new CountDownTimerUtils(Activity_FixPassword.this,tv_getShorMsg, 60000, 1000,2); //开始倒计时 mCountDownTimerUtils.start();
/** * 短信验证码倒计时 * Created by wyz on 2017/3/23. */ public class CountDownTimerUtils extends CountDownTimer implements Serializable{ private TextView mTextView; private Context context; private int number; public void setMillisUntilFinished(long millisUntilFinished) { this.millisUntilFinished = millisUntilFinished; } private long millisUntilFinished; public long getMillisUntilFinished() { return millisUntilFinished; } /** * * @param context * @param textView * @param millisInFuture n秒就传 n*1000 * @param countDownInterval 传1000 * @param number 显示红色字的位数 8秒就传1 20秒就传2 100秒就传3 */ public CountDownTimerUtils(Context context , TextView textView, long millisInFuture, long countDownInterval,int number) { super(millisInFuture, countDownInterval); this.mTextView = textView; this.context = context; this.number = number; } @Override public void onTick(long millisUntilFinished) { //设置不可点击 mTextView.setClickable(false); //设置倒计时时间 mTextView.setText(millisUntilFinished/1000 + "s后可重新获取"); mTextView.setCompoundDrawables(null,null,null, context.getResources().getDrawable(R.drawable.underline)); /** * 超链接 URLSpan * 文字背景颜色 BackgroundColorSpan * 文字颜色 ForegroundColorSpan * 字体大小 AbsoluteSizeSpan * 粗体、斜体 StyleSpan * 删除线 StrikethroughSpan * 下划线 UnderlineSpan * 图片 ImageSpan */ 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, number, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);//将倒计时的时间设置为红色 mTextView.setText(spannableString); setMillisUntilFinished(millisUntilFinished); } @Override public void onFinish() { cancel(); mTextView.setText("获取短信验证码"); mTextView.setClickable(true);//重新获得点击 } /** * 判断是几位数 * @param x * @return */ public static int getSizeOfInt(int x){ int[] sizeTable = { 9, 99, 999}; for (int i = 0;; i++) { if (x <= sizeTable[i]) return i + 1; } } }