使用相同的按钮暂停Android倒计时器

时间:2018-04-29 21:49:31

标签: android countdowntimer

我找到了很多关于如何在Android中暂停倒计时器的示例,但每个示例都使用了多个按钮(暂停,恢复和取消)。

我想要一个按钮,当我按下它时,计时器启动,然后当我再次按下它时会暂停(取消原始计时器,捕获计时器值)并在再次点击时恢复(从暂停中获取捕获的时间)开始一个新的反击者。)

有没有人有一个如何实现这个目标的例子?我已经在按钮的onClick侦听器中尝试了if else循环。我有一个非常粗糙的半工作的例子;

if (gameOn == 1) {
 if((clkOnTimerBtn % 2)==0) {
    isPaused = true; // PAUSE COUNTDOWN TIMER
    resumeCountDownTimer(view, "pause");
 } else { // RESUME COUNTDOWN TIMER
   resumeCountDownTimer(view, "resume");
}

上面的问题是这是在按钮onclick监听器中执行的,所以如果在我的resumeCountDownTimer中创建了一个新的CountDownTimer,则以后无法访问定时器以取消它(暂停)。我也试图寻找一种取消所有倒计时器的方法,如果可能的话我会弄乱,但我找不到任何这样做的例子或参考,因为这至少会得到理想的行为,即使它不是最优雅的方式。

1 个答案:

答案 0 :(得分:1)

如果我理解正确的话,这样的事情应该有用。

public class MainActivity extends AppCompatActivity {

CountDownTimer countDownTimer;
long duration = 100000; //This is the initial time,
long millisecondsLeft = 100000; // This is the time left. At the start it equales the duration.
boolean isCountDownTimerActive = false;
Button startButton;

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


    start = (Button) findViewById(R.id.startStop);
    final TextView timeLeft = (TextView) findViewById(R.id.timeLeft);

    start.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (isCountDownTimerActive) {
                if (countDownTimer != null)
                    countDownTimer.cancel();
                isCountDownTimerActive = false;
            } else {
                countDownTimer = new CountDownTimer(millisecondsLeft, 1000) {
                    @Override
                    public void onTick(long l) {
                        millisecondsLeft = l;
                        timeLeft.setText(" " + l);
                    }

                    @Override
                    public void onFinish() {

                    }
                };
                isCountDownTimerActive = true;
                countDownTimer.start();
            }
        }
    });
}

}