import android.os.CountDownTimer; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.view.animation.ScaleAnimation; import android.widget.TextView; public class MyCountTimer extends CountDownTimer { public static final int TIME_COUNT = 4000;//倒计时总时间为3S private TextView btn; private String endStrRid; /** * 参数 millisInFuture 倒计时总时间 * 参数 countDownInterval 渐变时间(每次倒计1s) * 参数 btn 点击的按钮(因为Button是TextView子类,为了通用我的参数设置为TextView) * 参数 endStrRid 倒计时结束后,按钮对应显示的文字 */ public MyCountTimer(long millisInFuture, long countDownInterval, TextView btn, String endStrRid) { super(millisInFuture, countDownInterval); this.btn = btn; this.endStrRid = endStrRid; } /** * 参数上面有注释 */ public MyCountTimer(TextView btn, String endStrRid) { super(TIME_COUNT, 1000); this.btn = btn; this.endStrRid = endStrRid; } /** * 计时完毕时触发 */ @Override public void onFinish() { btn.setText(endStrRid); btn.setEnabled(true); } /** * 计时过程显示 */ @Override public void onTick(long millisUntilFinished) { btn.setEnabled(false); //每隔一秒修改一次UI int sec = (int) (millisUntilFinished / 1000); if (sec>0) { btn.setText(sec+""); }else btn.setText(endStrRid); // 设置透明度渐变动画 final AlphaAnimation alphaAnimation = new AlphaAnimation(0, 1); //设置动画持续时间 alphaAnimation.setDuration(1000); btn.startAnimation(alphaAnimation); // 设置缩放渐变动画 final ScaleAnimation scaleAnimation =new ScaleAnimation(0.5f, 2f, 0.5f,2f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); scaleAnimation.setDuration(1000); btn.startAnimation(scaleAnimation); } }
@Override public void initData() { super.initData(); myCountTimer = new MyCountTimer(60 * 1000, 1000, view, "文字要显示的内容") { @Override public void onFinish() { super.onFinish(); binding.tvBtnNext.setEnabled(true); } }; //点击开始 binding.tvVercode.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ToastUtils.showShort("验证码已下发,请注意查收"); myCountTimer.start(); binding.tvBtnNext.setEnabled(false); } }); } //销毁取消 @Override protected void onDestroy() { super.onDestroy(); myCountTimer.cancel(); }