Java 如何制作重复倒计时计时器

Java 如何制作重复倒计时计时器,java,android,Java,Android,我正在制作关机计时器,我想在休息后重新播放。例如,我将计时器设置为4秒,在这4秒之后,我想休息10秒,然后我想再次计时4分钟 我的计时器是那样的 long millisInput = Long.parseLong(input) * 60000; mButtonStartPause.setOnClickListener(new View.OnClickListener() { @Override public void o

我正在制作关机计时器,我想在休息后重新播放。例如,我将计时器设置为4秒,在这4秒之后,我想休息10秒,然后我想再次计时4分钟 我的计时器是那样的

            long millisInput = Long.parseLong(input) * 60000;      
    mButtonStartPause.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (mTimerRunning) {
                pauseTimer();
            } else {
               startTimer();
           }

    });
    mButtonReset.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            resetTimer();
        }
    });
}
private void setTime(long milliseconds) {
    mStartTimeInMillis = milliseconds;
    resetTimer();
    closeKeyboard();
}
private void startTimer() {
    mEndTime = System.currentTimeMillis() + mTimeLeftInMillis;
    mCountDownTimer = new CountDownTimer(mTimeLeftInMillis, 1000) {
        @Override
        public void onTick(long millisUntilFinished) {
    mTimerRunning = true;
            mTimeLeftInMillis = millisUntilFinished;
            updateCountDownText();
        }
        @Override
        public void onFinish() {
            mTimerRunning = false;
           updateWatchInterface();
           new Handler().postDelayed(new Runnable() {
     @Override
     public void run() {
        if(counter++ < 5){
            startTimer();
        }
     }
  },10000);
        }
    }.start();
    updateWatchInterface();
}
private void pauseTimer() {
    mCountDownTimer.cancel();
    mTimerRunning = false;
    updateWatchInterface();
}
private void resetTimer() {
    mTimeLeftInMillis = mStartTimeInMillis;
    updateCountDownText();
    updateWatchInterface();
}
private void updateCountDownText() {
    int hours = (int) (mTimeLeftInMillis / 1000) / 3600;
    int minutes = (int) ((mTimeLeftInMillis / 1000) % 3600) / 60;
    int seconds = (int) (mTimeLeftInMillis / 1000) % 60;
    String timeLeftFormatted;
    if (hours > 0) {
        timeLeftFormatted = String.format(Locale.getDefault(),
                "%d:%02d:%02d", hours, minutes, seconds);
    } else {
        timeLeftFormatted = String.format(Locale.getDefault(),
                "%02d:%02d", minutes, seconds);
    }
    mTextViewCountDown.setText(String.valueOf(counter + 1) +" - "+timeLeftFormatted);
}
private void updateWatchInterface() {
    if (mTimerRunning) {
        mEditTextInput.setVisibility(View.INVISIBLE);
        mButtonSet.setVisibility(View.INVISIBLE);
        mButtonReset.setVisibility(View.INVISIBLE);
        mButtonStartPause.setText("Pause");
    } else {
        mEditTextInput.setVisibility(View.VISIBLE);
        mButtonSet.setVisibility(View.VISIBLE);
        mButtonStartPause.setText("Start");

        if (mTimeLeftInMillis < 1000) {
            mButtonStartPause.setVisibility(View.INVISIBLE);
        } else {
            mButtonStartPause.setVisibility(View.VISIBLE);
        }

        if (mTimeLeftInMillis < mStartTimeInMillis) {
            mButtonReset.setVisibility(View.VISIBLE);
        } else {
            mButtonReset.setVisibility(View.INVISIBLE);
        }
    }
}
private void closeKeyboard() {
    View view = this.getCurrentFocus();
    if (view != null) {
        InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
    }
}
@Override
protected void onStop() {
    super.onStop();
    SharedPreferences prefs = getSharedPreferences("prefs", MODE_PRIVATE);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putLong("startTimeInMillis", mStartTimeInMillis);
    editor.putLong("millisLeft", mTimeLeftInMillis);
    editor.putBoolean("timerRunning", mTimerRunning);
    editor.putLong("endTime", mEndTime);

    editor.apply();
    if (mCountDownTimer != null) {
        mCountDownTimer.cancel();
   }
}
@Override
protected void onStart() {
    super.onStart();
    SharedPreferences prefs = getSharedPreferences("prefs", MODE_PRIVATE);
    mStartTimeInMillis = prefs.getLong("startTimeInMillis", 600000);
    mTimeLeftInMillis = prefs.getLong("millisLeft", mStartTimeInMillis);
    mTimerRunning = prefs.getBoolean("timerRunning", false);
    updateCountDownText();
    updateWatchInterface();

    if (mTimerRunning) {
        mEndTime = prefs.getLong("endTime", 0);
        mTimeLeftInMillis = mEndTime - System.currentTimeMillis();

        if (mTimeLeftInMillis < 0) {
            mTimeLeftInMillis = 0;
            mTimerRunning = false;
            updateCountDownText();
            updateWatchInterface();
        } else {
            startTimer();
        }
    }
}
long millisInput=long.parseLong(输入)*60000;
mButtonStartPause.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
如果(mTimerRunning){
pauseTimer();
}否则{
startTimer();
}
});
mbutonreset.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
重置计时器();
}
});
}
私有void设置时间(长毫秒){
mStartTimeInMillis=毫秒;
重置计时器();
关闭键盘();
}
私有void startTimer(){
mEndTime=System.currentTimeMillis()+mTimeLeftInMillis;
mCountDownTimer=新的倒计时(mtimelftinmillis,1000){
@凌驾
公共void onTick(长毫秒未完成){
mTimerRunning=真;
mTimeLeftInMillis=毫秒直至完成;
updateCountDownText();
}
@凌驾
公共无效onFinish(){
mTimerRunning=假;
updateWatchInterface();
new Handler().postDelayed(new Runnable()){
@凌驾
公开募捐{
如果(计数器+++<5){
startTimer();
}
}
},10000);
}
}.start();
updateWatchInterface();
}
私有void pauseTimer(){
mCountDownTimer.cancel();
mTimerRunning=假;
updateWatchInterface();
}
私有void resetTimer(){
mTimeLeftInMillis=mStartTimeInMillis;
updateCountDownText();
updateWatchInterface();
}
私有void updateCountDownText(){
整数小时=(整数)(mtimelftinmillis/1000)/3600;
int分钟=(int)((mTimeLeftInMillis/1000)%3600)/60;
整数秒=(整数)(mTimeLeftInMillis/1000)%60;
字符串时间倒转格式;
如果(小时数>0){
timeLeftFormatted=String.format(Locale.getDefault(),
%d:%02d:%02d”,小时、分钟、秒);
}否则{
timeLeftFormatted=String.format(Locale.getDefault(),
“%02d:%02d”,分,秒);
}
mTextViewCountDown.setText(String.valueOf(counter+1)+“-”+timeLeftFormatted);
}
私有void updateWatchInterface(){
如果(mTimerRunning){
mEditTextInput.setVisibility(视图不可见);
mbutonset.setVisibility(视图不可见);
mbutonreset.setVisibility(视图不可见);
mButtonStartPause.setText(“暂停”);
}否则{
mEditTextInput.setVisibility(View.VISIBLE);
mbutonset.setVisibility(View.VISIBLE);
mButtonStartPause.setText(“开始”);
if(mTimeLeftInMillis<1000){
mButtonStartPause.setVisibility(视图不可见);
}否则{
mButtonStartPause.setVisibility(View.VISIBLE);
}
if(mTimeLeftInMillis

在设定一分钟后,我想在同一时间重复5次。(IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII

int timerMilliSecond = 4000;

        CountDownTimer countDownTimer = new CountDownTimer(timerMilliSecond, 1000) {
            @Override
            public void onTick(long millisUntilFinished) {
                tv2.setText("Przygotuj się:\n " + (millisUntilFinished / 1000));
            }

            public void onFinish() {
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        timerMilliSecond = 4 * 60000;
                        countDownTimer.start();
                    }
                },1000);
            }
        }.start();

我希望它对您有所帮助。

用此代码替换您的代码

int timerMilliSecond = 4000;

        CountDownTimer countDownTimer = new CountDownTimer(timerMilliSecond, 1000) {
            @Override
            public void onTick(long millisUntilFinished) {
                tv2.setText("Przygotuj się:\n " + (millisUntilFinished / 1000));
            }

            public void onFinish() {
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        timerMilliSecond = 4 * 60000;
                        countDownTimer.start();
                    }
                },1000);
            }
        }.start();
int counter = 0;
CountDownTimer countDownTimer;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    countDownTimer = new CountDownTimer(4000, 1000) {
            @Override
            public void onTick(long millisUntilFinished) {
                int rounded =  (int) (((millisUntilFinished + 999) / 1000 ) * 1000); // 4000,3000,2000,1000 ....
                tv2.setText("Przygotuj się:\n " + (rounded / 1000));
            }

            public void onFinish() {
                tv2.setText("Przygotuj się:\n " + 0);
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        if(counter++ < 5)
                            countDownTimer.start();
                    }
                },10000);  // repeat after ten seconds.
            }
        }.start();
 }
希望对您有所帮助。

int counter=0;
int counter = 0;
CountDownTimer countDownTimer;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    countDownTimer = new CountDownTimer(4000, 1000) {
            @Override
            public void onTick(long millisUntilFinished) {
                int rounded =  (int) (((millisUntilFinished + 999) / 1000 ) * 1000); // 4000,3000,2000,1000 ....
                tv2.setText("Przygotuj się:\n " + (rounded / 1000));
            }

            public void onFinish() {
                tv2.setText("Przygotuj się:\n " + 0);
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        if(counter++ < 5)
                            countDownTimer.start();
                    }
                },10000);  // repeat after ten seconds.
            }
        }.start();
 }
倒计时倒计时; @凌驾 创建时受保护的void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); 倒计时=新的倒计时(40001000){ @凌驾 公共void onTick(长毫秒未完成){ 整数四舍五入=(整数)((千分位数+999)/1000)*1000;//4000300000001000。。。。 tv2.setText(“Przygotuj się:\n”+(四舍五入/1000)); } 公共无效onFinish(){ tv2.setText(“Przygotuj się:\n”+0); new Handler().postDelayed(new Runnable()){ @凌驾 公开募捐{ 如果(计数器+++<5) countDownTimer.start(); } },10000);//十秒钟后重复。 }