主要用到的功能,自定义一个定时器CountTimer继承CountDownTimer。
public class CountTimer extends CountDownTimer { private Context context; /** * 参数 millisInFuture 倒计时总时间(如60S,120s等) * 参数 countDownInterval 渐变时间(每次倒计1s) */ public CountTimer(long millisInFuture, long countDownInterval,Context context) { super(millisInFuture, countDownInterval); this.context=context; } // 计时完毕时触发 @Override public void onFinish() { UIHelper.showMainActivity((Activity) context); } // 计时过程显示 @Override public void onTick(long millisUntilFinished) { } }
方法很简单,只需要在onFinish()方法中执行计时完毕的操作。
接下来在需要在执行的类里调用该方法。
这里我封装了一个类。
public class BaseDispatchTouchActivity extends AppCompatActivity{ private CountTimer countTimerView; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); init(); } private void timeStart(){ new Handler(getMainLooper()).post(new Runnable() { @Override public void run() { countTimerView.start(); } }); } private void init() { //初始化CountTimer,设置倒计时为2分钟。 countTimerView=new CountTimer(120000,1000,BaseDispatchTouchActivity.this); } /** * 主要的方法,重写dispatchTouchEvent * @param ev * @return */ @Override public boolean dispatchTouchEvent(MotionEvent ev) { switch (ev.getAction()){ //获取触摸动作,如果ACTION_UP,计时开始。 case MotionEvent.ACTION_UP: countTimerView.start(); break; //否则其他动作计时取消 default:countTimerView.cancel(); break; } return super.dispatchTouchEvent(ev); } @Override protected void onPause() { super.onPause(); countTimerView.cancel(); } @Override protected void onResume() { super.onResume(); timeStart(); } }