CountDownTimer 暂停并取消

CountDownTimer paused and cancel

我的视图构造函数中有一个倒数计时器 class。它似乎解决了。但我做不到 .cancel()。有人可以帮我解决我的编码问题吗?这是我的代码。

private CountDownTimer countTimer;
public GameView(Context context) {
    super(context);
            new CountDownTimer(20000, 1000) {
            public void onTick(long millisUntilFinished) {
                countDowntimer = String.valueOf(millisUntilFinished / 1000);
                invalidate();
            }
            public void onFinish() {
                timer.setColor(Color.TRANSPARENT);
                if (Game.lifeCount <= 1) {
                    countDowntimer = String.valueOf("TIME'S UP!");
                    if (countmaze == 0) {
                        timesUpDialog1();
                    } else if (countmaze == 1) {
                        timesUpDialog2();
                    } else if (countmaze == 2) {
                        timesUpDialog3();
                    } else if (countmaze == 3)
                        timesUpDialog4();
                } else {
                    showGameoverDialog();
                }
            }
        }.start();

代码告诉玩家只要时间用完就会失去生命然后在我的 onTouch event

if (maze.isWrongAnswer()) {
    countTimer.cancel();
    //..some codes here

但是每当我遇到这种情况时,countTimer.cancel() 将无法工作。为什么?请帮帮我。谢谢。顺便一提。我还想在我的倒计时中有一个 pause method。有没有一种简单的方法可以做到这一点?非常感谢!

您忘记将倒数计时器放入您的全局变量中:

private CountDownTimer countTimer;
public GameView(Context context) {
    super(context);
            countTimer = new CountDownTimer(20000, 1000) { //<- in here bro
            public void onTick(long millisUntilFinished) {
                countDowntimer = String.valueOf(millisUntilFinished / 1000);
                invalidate();
            }
            public void onFinish() {
                timer.setColor(Color.TRANSPARENT);
                if (Game.lifeCount <= 1) {
                    countDowntimer = String.valueOf("TIME'S UP!");
                    if (countmaze == 0) {
                        timesUpDialog1();
                    } else if (countmaze == 1) {
                        timesUpDialog2();
                    } else if (countmaze == 2) {
                        timesUpDialog3();
                    } else if (countmaze == 3)
                        timesUpDialog4();
                } else {
                    showGameoverDialog();
                }
            }
        }.start();

对于暂停,我正在使用 sharedPreferences 来保存滴答计数器。然后在我想恢复倒计时时加载它。