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