Countdown timer with pause and resume

后端 未结 8 907
小蘑菇
小蘑菇 2021-01-05 04:17

I want to do countdown timer with pause and restart.Now i am displaying countdown timer By implenting ontick() and onfinish().please help me out.HEre is th code for countdow

8条回答
  •  花落未央
    2021-01-05 04:28

    My first answer on stackOverFlow, hope it should help :) ... This is how I solved the problem, control timer from Fragment, Bottomsheet, Service, Dialog as per your requirement, keep a static boolean variable to control.

    declare in your Activity:

    long presetTime, runningTime;    
    Handler mHandler =new Handler();    
    Runnable countDownRunnable;
    Toast toastObj;
    public static boolean shouldTimerRun = true;
    TextView counterTv;
    

    In onCreate:

    presetTime =60000L;
    runningTime= presetTime;
    //setting up Timer
    countDownRunnable=new Runnable() {
           @Override
             public void run() {
              if (shouldTimerRun) //if false, it runs but skips counting
              {
                    counterTv.setText(simplifyTimeInMillis(runningTime));
                 if (runningTime==0) {
                     deployToast("Task Completed"); //show toast on task completion 
                    }
                 runningTime -= 1000;
                 presetTime = runningTime; //to resume the timer from last position
              }
              mHandler.postDelayed(countDownRunnable,1000); //simulating on-tick
             }
        };
    mHandler.post(countDownRunnable); // Start our CountdownTimer
    

    Now, whenever you want to pause the timer change the value of shouldTimerRun false and to resume make it true.

    @Override
        public void onResume() {
            super.onResume();
            shouldTimerRun=true;
        }
    
        @Override
        public void onPause() {
            super.onPause();
            shouldTimerRun=false;
            deployToast("Timer is paused !!");
        }
    

    Helping methods: (can be skipped)

    public static String simplifyTimeInMillis(long time) {
    
            String result="";
            long difference = time;
            long secondsInMilli = 1000;
            long minutesInMilli = secondsInMilli * 60;
            long hoursInMilli = minutesInMilli * 60;
    
            if (difference<1000){
                return "0";
            }
    
            if (difference>=3600000) {
                result = result + String.valueOf(difference / hoursInMilli) + "hr ";
                difference = difference % hoursInMilli;
            }
            if (difference>=60000) {
                result = result + String.valueOf(difference / minutesInMilli) + "m ";
                difference = difference % minutesInMilli;
            }
            if (difference>=1000){
                result = result + String.valueOf(difference / secondsInMilli) + "s";
            }
    
            return result;
        }
    
    public void deployToast(String msg){
            if (toastObj!=null)
                toastObj.cancel();
            toastObj = Toast.makeText(mContext,msg,Toast.LENGTH_SHORT);
            toastObj.show();
        }
    

提交回复
热议问题