自动恢复 CountDownTimer

AutoResume CountDownTimer

我的应用程序中有一个 CountDownTimer。我正在为我的学校项目开发游戏。我很难确定如何自动恢复倒计时。

这就是我希望我的倒数计时器执行的操作: 单击图像视图以触发倒计时开始(工作)> 单击图像视图以 stop/pause 倒计时 > 10 秒后自动恢复倒计时(我的大问题 T_T)。

我需要一份自动简历,因为我正在开发一款游戏,嗯,我认为这通常是游戏提供的?在我使用的代码中,单击暂停图像视图后,计时器暂停。但是每当我再次单击触发开始的图像按钮时,它都会回到 59,而不是我单击暂停时的时间。

基本上,这是我的第一个应用程序。我现在正在使用 Android Studio(我之前使用 Eclipse Juno)。我非常需要这些方面的帮助。 TIA :)

public class TimeAttack extends Activity {

 TextView timer;
 
 private CountDownTimer countDownTimer;
 private boolean timeHasStarted = false;
    
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
      
        setContentView(R.layout.time_attack);
        
  
  timer = (TextView) this.findViewById(R.id.timer);
  timer.setText("00:01:00");
  countDownTimer = new MyCountDownTimer(60000,1000);
  
    
  blizzard.setOnClickListener(new View.OnClickListener() {
   
   @Override
   public void onClick(View v) {
    
   // this button should pause the time, and its working YAY!
    countDownTimer.cancel();
     timeHasStarted = false; 
    
   }
  });
 
  //CustomClickListener
  OnClickListener myCommoClickListner = new OnClickListener(){

   @Override
   public void onClick(View arg0) {

//if an imagebutton is clicked, it will trigger the countdowntimer to start its countdown
     if (!timeHasStarted) {
               countDownTimer.start();
               timeHasStarted = true;
               }
                
                }



    //COUNTDOWNTIMER
    @TargetApi(Build.VERSION_CODES.GINGERBREAD) @SuppressLint("NewApi") public class MyCountDownTimer extends CountDownTimer{
  public MyCountDownTimer(long millisInFuture, long countDownInterval){
   super(millisInFuture, countDownInterval);
  }

  @TargetApi(Build.VERSION_CODES.GINGERBREAD) @SuppressLint("NewApi") @Override
  public void onTick(long millisUntilFinished) {
   // TODO Auto-generated method stub
   long millis = millisUntilFinished;  
            String hms = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis),  
                TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)),  
                TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));  
            System.out.println(hms);  
            timer.setText(hms);  
   
  }

  @Override
  public void onFinish() {
   // TODO Auto-generated method stub
   timer.setText("Time's Up!");
  }

有不同的方法可以做到这一点。

  1. 您可以在 UI 线程中使用计时器本身。
  2. 您可以在单独的线程中使用计时器(这是一个很好的做法)。有点像。

    线程计时器 = new Thread(){ public无效运行(){ 尝试 { 睡眠(10000); } 赶上(中断异常e) { e.printStackTrace(); } 最后 { 如果(!timeHasStarted){ countDownTimer.start(); 时间已开始=真; } } }; timer.start();

  3. 使用处理程序来完成这项工作。代码如下

        new Handler().postDelayed(new Runnable() {
    
        /*
         * Showing splash screen with a timer. This will be useful when you
         * want to show case your app logo / company
         */
    
        @Override
        public void run() {
            // This method will be executed once the timer is over
            // Start your app main activity
            if (!timeHasStarted) {
                       countDownTimer.start();
                       timeHasStarted = true;
        }
    }, 10000);                    //10 seconds
    

抱歉格式问题,但我认为你可以处理。