触发开始倒计时,一般是点击按钮事件中
mTime = new TimeCount(60000, 1000);//参数一 :总时长,参数二:间隔时长
mTime.start(); //开始计时
startTimel = System.currentTimeMillis();//记录开始时间(后期有用)
创建TimeCount类
class TimeCount extends CountDownTimer {
public TimeCount(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
@Override
public void onTick(long lg) {
tv_login_yzm.setClickable(false);
tv_login_yzm.setBackground(loginBgnom(LoginActivity.this));
tv_login_yzm.setTextColor(getResources().getColor(R.color.readb));
tv_login_yzm.setText("重新获取("+lg/1000+")");
endTimel = System.currentTimeMillis();
//获取倒计时剩余时间(当前时间戳-开始时间戳=剩余时间)
residueTime = endTimel - startTimel ;
if(restTimerTime!=0&&restTimerTime>0){ //restTimerTime二次进入应该倒计时的总时间
residueTime = restTimerTime-residueTime ;
LogTools.logi(Contans.TAG,"aresiduetime"+residueTime );
}else {
residueTime = 60000-residuetime;
LogTools.logi(Contans.TAG,"bresiduetime"+residueTime );
}
}
@Override
public void onFinish() {
tv_login_yzm.setText("获取验证码");
//手机号为11位可以点击
if (ed_login_phone.getEditableText().length() == 11){
tv_login_yzm.setBackground(loginYzmBgselect(LoginActivity.this));
tv_login_yzm.setTextColor(getResources().getColor(R.color.loginback));
tv_login_yzm.setClickable(true);
}
LogTools.logi(Contans.TAG,"结束");
//计时结束不管是否二次进入都把二次进入时间设为0并清上次退出剩余倒计时
restTimerTime=0;
//清空上次退出时间
SharedPreferencesUtils.put(LoginActivity.this, "REST_TIME", "");
}
}
每次进入登录页面时判断是否是二次进入倒计时是否已经结束放在oncreate里
private void reastartTime() {
//获取剩余倒计时时间戳
String rest_time = (String) SharedPreferencesUtils.get(LoginActivity.this, "REST_TIME", "");
LogTools.logi(Contans.TAG,"rest_time"+rest_time);
if (EmptyUtils.isNotEmpty(rest_time)){ //是否二次进入
long endTime = Long.parseLong(rest_time);
LogTools.logi(Contans.TAG,"endTime"+endTime);
if(endTime!=0){
//倒计时剩余时间
long currTime = System.currentTimeMillis();
restTimerTime = endTime - currTime;
LogTools.logi(Contans.TAG,"restTimerTime"+restTimerTime);
if (restTimerTime > 0){
mTime = new TimeCount(restTimerTime, 1000);
mTime.start();
startTimel = System.currentTimeMillis();//二次进入记录开始时间
SharedPreferencesUtils.put(LoginActivity.this, "REST_TIME", "");
//清空上次退出时间
}else {
mTime = new TimeCount(60000, 1000);
}
}else {
mTime = new TimeCount(60000, 1000);
}
}else {
//首次进入
mTime = new TimeCount(60000,1000);
}
}
记得在结束时记录一下倒计时剩余时间
@Override
protected void onPause() {
super.onPause();
long mendTime = System.currentTimeMillis();
LogTools.logi(Contans.TAG,"mendTime "+mendTime );
SharedPreferencesUtils.put(LoginActivity.this,"REST_TIME",String.valueOf(mendTime +residueTime));
}