Java 在android中暂停和恢复倒计时和进度条?

Java 在android中暂停和恢复倒计时和进度条?,java,android,timer,progress-bar,countdowntimer,Java,Android,Timer,Progress Bar,Countdowntimer,我正在制作一个简单的应用程序,使用倒计时,循环 进度条和3个按钮开始、暂停和继续。我正在尝试的是 do是指当某个特定活动开始时,我按下“暂停”按钮,它将被存储 计时器暂停并从该点恢复的时间 向前。但问题是倒计时timmer没有停止,所以如果我 暂停7秒,进度条在7秒停止,但当我按下 无论倒计时计时器的值是多少,它都会从该值开始 等一下,这就是我要实现的代码 这是倒计时的代码 private void neck_rotations() { neckRotation = t

我正在制作一个简单的应用程序,使用倒计时,循环 进度条和3个按钮开始、暂停和继续。我正在尝试的是 do是指当某个特定活动开始时,我按下“暂停”按钮,它将被存储 计时器暂停并从该点恢复的时间 向前。但问题是倒计时timmer没有停止,所以如果我 暂停7秒,进度条在7秒停止,但当我按下 无论倒计时计时器的值是多少,它都会从该值开始 等一下,这就是我要实现的代码

这是倒计时的代码

 private void neck_rotations()
    {
        neckRotation = true;
        mCountDownTimer = new CountDownTimer(NECK_ROTATION_TIME, 1000)
        {
            @Override
            public void onTick(long millisUntilFinished)
            {

                if (isPaused || isCanceled)
                {
                    paused_at = (int) (millisUntilFinished / 1000);

                } else
                {
                    timeRemaining = (int) (millisUntilFinished / 1000);
                    donutProgress.setMaxValue(NECK_ROTATION_TIME / 1000);
                    donutProgress.setValueAnimated((int) timeRemaining);
                    counter.setText(String.valueOf(timeRemaining));

                }

            }

            @Override
            public void onFinish()
            {
                response = "Jumps";
                rest(response);

            }
        };
        mCountDownTimer.start();
    }
我是编程新手,非常感谢您的帮助或建议。

请参考以下内容:

我不确定您是否可以通过内部onTick()方法禁用计时器,使其停止倒计时


为倒计时计时器创建一个gloabl引用,并仅从该引用的clickListeners中调用start()或cancel()。

是的,我已将倒计时计时器设置为全局。我对3种不同的方法使用相同的倒计时计时器。颈部旋转()、手部旋转()和跳跃()因此,当用户单击开始时,会调用第1个方法,并且在完成时,每个方法之后都会有10秒的休息时间。在我看来,当您按下btnResume时,您正在创建一个新的倒计时程序,并且您还将mCountDownTimer作为对另一个倒计时程序的引用。为什么呢?继续为onClick()使用mCountDownTimer。无论如何,不应该从onTick()函数中调用cancel()函数。是的,这是正确的。你能帮忙吗?你能举个例子吗?请参考我提供的链接,有一个很好的解决方案可以满足您的需要。我尝试了该解决方案,它有取消和启动方法,但没有恢复方法,根据该示例,取消不应该从onTick调用,而是从外部调用,因此现在当我单击resume时,它会重新启动计时器。我如何在此处实现恢复功能?您能提供帮助吗?
 private void neck_rotations()
    {
        neckRotation = true;
        mCountDownTimer = new CountDownTimer(NECK_ROTATION_TIME, 1000)
        {
            @Override
            public void onTick(long millisUntilFinished)
            {

                if (isPaused || isCanceled)
                {
                    paused_at = (int) (millisUntilFinished / 1000);

                } else
                {
                    timeRemaining = (int) (millisUntilFinished / 1000);
                    donutProgress.setMaxValue(NECK_ROTATION_TIME / 1000);
                    donutProgress.setValueAnimated((int) timeRemaining);
                    counter.setText(String.valueOf(timeRemaining));

                }

            }

            @Override
            public void onFinish()
            {
                response = "Jumps";
                rest(response);

            }
        };
        mCountDownTimer.start();
    }