同一按钮上有多个计时器

  • 本文关键字:计时器 按钮 android
  • 更新时间 :
  • 英文 :


如何通过单击一个按钮使4个10分钟的计时器倒计时?我所能做的就是一个定时器,其余的都在00:00。我知道我必须对它起作用的那个做同样的事情,但我很久以前就做了第一个。有人能告诉我该做什么以及在哪里做吗?

private static final long START_TIME_IN_MILLIS = 600000;
private TextView mTextViewCountDown;
private TextView mTextViewCountDown_2;
private TextView mTextViewCountDown_3;
private TextView mTextViewCountDown_4;
private Button mButtonStartPause;
private Button mButtonReset;
private CountDownTimer mCountDownTimer;
private boolean mTimerRunning;
private long mTimeLeftInMillis = START_TIME_IN_MILLIS;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);

mTextViewCountDown = findViewById(R.id.text_view_countdown);
mTextViewCountDown_2 = findViewById(R.id.text_view_countdown_2);
mTextViewCountDown_3 = findViewById(R.id.text_view_countdown_3);
mTextViewCountDown_4 = findViewById(R.id.text_view_countdown_4);
mButtonStartPause = findViewById(R.id.button_start_pause);
mButtonReset = findViewById(R.id.button_reset);
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();
}
});
updateCountDownText();
}
private void startTimer() {
mCountDownTimer = new CountDownTimer(mTimeLeftInMillis, 1000) {
@Override
public void onTick(long millisUntilFinished) {
mTimeLeftInMillis = millisUntilFinished;
updateCountDownText();
}
@Override
public void onFinish() {
mTimerRunning = false;
mButtonStartPause.setText("Start");
mButtonStartPause.setVisibility(View.INVISIBLE);
mButtonReset.setVisibility(View.VISIBLE);
}
}.start();
mTimerRunning = true;
mButtonStartPause.setText("Pause");
mButtonReset.setVisibility(View.INVISIBLE);
}
private void pauseTimer() {
mCountDownTimer.cancel();
mTimerRunning = false;
mButtonStartPause.setText("Start");
mButtonReset.setVisibility(View.VISIBLE);
}
private void resetTimer() {
mTimeLeftInMillis = START_TIME_IN_MILLIS;
updateCountDownText();
mButtonReset.setVisibility(View.INVISIBLE);
mButtonStartPause.setVisibility(View.VISIBLE);
}
private void updateCountDownText() {
int minutes = (int) (mTimeLeftInMillis / 1000) / 60;
int seconds = (int) (mTimeLeftInMillis / 1000) % 60;
String timeLeftFormatted = String.format(Locale.getDefault(), "%02d:%02d", minutes, seconds);
mTextViewCountDown.setText(timeLeftFormatted);
}
} ```

您基本上需要再制作3个定时器变量,3个mTimeLeftInMillis变量,启动其他3个定时器,然后以与第一个相同的方式更新其他3个文本视图。

所以,你可以这样做(假设你想同时启动/停止所有4个(:

private CountDownTimer mCountDownTimer;
private CountDownTimer mCountDownTimer2;
private CountDownTimer mCountDownTimer3;
private CountDownTimer mCountDownTimer4;
private boolean mTimerRunning;
private long mTimeLeftInMillis = START_TIME_IN_MILLIS;
private long mTimeLeftInMillis2 = START_TIME_IN_MILLIS;
private long mTimeLeftInMillis3 = START_TIME_IN_MILLIS;
private long mTimeLeftInMillis4 = START_TIME_IN_MILLIS;

然后,在您的startTimer方法中,您以与第一个相同的方式初始化其他3个计时器,使用以下内容:

mCountDownTimer2 = new CountDownTimer(mTimeLeftInMillis2, 1000) {...
mCountDownTimer3 = new CountDownTimer(mTimeLeftInMillis3, 1000) {...
mCountDownTimer4 = new CountDownTimer(mTimeLeftInMillis4, 1000) {...

正文中唯一的区别是updateCountDownText方法,因为您将不得不定义另外3个方法来更新彼此的文本视图以显示每个计时器,可能如下所示:

private void updateCountDownText2() {... // update mTextViewCountDown_2 in this method
private void updateCountDownText3() {... // update mTextViewCountDown_3 in this method
private void updateCountDownText4() {... // update mTextViewCountDown_4 in this method

然后在mCountDownTimer2mCountDownTimer3mCountDownTimer4定义中使用这些新方法。

有一些较短的方法可以做到这一点,但这就是要点

最新更新