主要用到的功能,自定義一個定時器CountTimer繼承CountDownTimer。ide
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()方法中執行計時完畢的操做。oop
接下來在須要在執行的類裏調用該方法。post
這裏我封裝了一個類。this
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(); } }