暂停后继续倒计时

Posted

技术标签:

【中文标题】暂停后继续倒计时【英文标题】:Continue countdown timer after pause 【发布时间】:2015-02-20 13:51:42 【问题描述】:

我有一个倒数计时器,我有一个暂停它的按钮,但我需要当你点击按钮时,继续倒计时。我搜索但找不到与此相关的功能。怎么办?这是我的代码,我只设法重新启动它,但没有继续:

private TextView cuentaRegresiva;
private Button btnEmpezar;
private CountDownTimer countDownTimer;
private boolean timerHasStarted = false;
private long startTime = 30 * 1000;
private final long interval = 1 * 1000;
private long restante;



@Override
protected void onCreate(Bundle savedInstanceState) 
...

btnEmpezar.setOnClickListener(iniciar);

 

OnClickListener iniciar=new OnClickListener() 

    @Override
    public void onClick(View arg0) 
        if (!timerHasStarted && !pausado) 
               countDownTimer.start();
               timerHasStarted = true;
               btnEmpezar.setText("Pause");
               pausado=false;
                
        else if(timerHasStarted && !pausado)
               countDownTimer.cancel();
               timerHasStarted = false;
               btnEmpezar.setText("Restart");
               pausado=true;
              
        else if(!timerHasStarted && pausado)
            countDownTimer2.start();
            timerHasStarted = true;
            btnEmpezar.setText("Pause");
            pausado=false;
        
    
;

public class MyCountDownTimer extends CountDownTimer 
      public MyCountDownTimer(long startTime, long interval) 
       super(startTime, interval);

      

      @Override
      public void onFinish() 
          cuentaRegresiva.setText("Tiempo!");
      

      @Override
      public void onTick(long millisUntilFinished) 
          cuentaRegresiva.setText("" + millisUntilFinished / 1000);
      
     

public class MyCountDownTimer2 extends CountDownTimer 
          public MyCountDownTimer2(long restante, long interval) 
           super(restante, interval);

          

          @Override
          public void onFinish() 
              cuentaRegresiva.setText("Tiempo!");
          

          @Override
          public void onTick(long millisUntilFinished) 
              cuentaRegresiva.setText("" + millisUntilFinished / 1000);

          
         

我曾想过将millisUntilFinished 放入一个变量,但没有奏效。无论如何,我想这条路已经接近了。

【问题讨论】:

文档不太清楚是否可以在 cancel() 之后再次使用 start()。我猜它不起作用。尽管您可以尝试在计时器运行时存储 millisUntilFinished 值。然后一旦需要重新启动计时器,创建新的计时器对象并将此值用作持续时间。 简单取消并从上次倒计时重新启动计时器或将计时器暂停状态传递给计时器类并继续检查 timertask 并跳过更新。恢复时重置状态。 【参考方案1】:

您可以尝试将秒数保存到完成,然后您可以使用该秒数启动新的倒计时。

// -----------

Cuando presionas el boton de pausa,guarda los segundos que le faltan al timer para que termine。 Entonces, cuando volves a pretar play, creas un nuevo CountDownTimer con esos segundos que te faltaban。

更新

我做了一个例子:

public class MainActivity extends Activity 
    private static final int TIMER_TIME = 10000; // in millis
    private Button btnCountdown;
    private TextView tvTimeUntilFinish;
    private boolean mIsPaused = true;
    private long mMillisUntilFinish;
    private CountDownTimer mTimer;

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

        mMillisUntilFinish = TIMER_TIME;

        btnCountdown = (Button) findViewById(R.id.btnCountdown);
        tvTimeUntilFinish = (TextView) findViewById(R.id.tvTimeUntilFinish);

        btnCountdown.setOnClickListener(new OnClickListener() 
            @Override
            public void onClick(View arg0) 
                if (mIsPaused) 
                    btnCountdown.setText("Pause");
                    initTimer();
                 else 
                    btnCountdown.setText("Play");
                    cancelTimer();
                

                mIsPaused = !mIsPaused;
            
        );
    

    private void cancelTimer() 

        if (mTimer != null) 
            mTimer.cancel();
            mTimer = null;
        

    

    private void initTimer() 
        mTimer = new CountDownTimer(mMillisUntilFinish, 1000) 
            public void onTick(long millisUntilFinished) 
                tvTimeUntilFinish.setText("seconds remaining: " + millisUntilFinished / 1000);
                mMillisUntilFinish = millisUntilFinished;
            

            public void onFinish() 
            
        .start();

    

【讨论】:

谢谢三一。在那里我编辑了代码,但我无法让它正常工作。当我重新启动它拉错误。格拉西亚斯三一。 Ahí edité el código probando lo que me decis, estoy guardando los segundos restantes en la variable "restante", pero cuando lo reanudo vuelve a tirar error。 Por otro lado podrías pasarme tu e-mail o algún contacto ya que tengo muy pocos conocidos programadores que hablen español, para compartir conocimientos e idea。谢谢!

以上是关于暂停后继续倒计时的主要内容,如果未能解决你的问题,请参考以下文章

页面显示多个计时器,有开始暂停按钮来控制倒计时的开关????求大神指点

暂停 jquery 倒计时按钮

JS 倒计时问题,手机网页后台运行时,js会暂停

IOS微信后台运行时候倒计时暂停问题

excel里用vba实现开始计时 暂停计时 结束计时这三种功能 暂停的同时可以开始另一个计时 大侠们帮帮我吧

用java编一个简单的倒计时表