2016-12-28 48 views
0

在我的新游戏中,你必须按下按钮才能获得积分。玩家必须在5秒内按下按钮 - 如果需要更多时间,GameOverScreen将被打开。否则倒计时应该重新开始。我试图将gameover();方法放在倒计时的finish()方法中,但似乎有可能终止方法总是开始并且不会被取消。我怎样才能停止倒计时呢?android-倒计时后打开活动

public class GameScreen extends Activity { 
    public int score = 0; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_game); 
     Button count = (Button) findViewById(R.id.button1); 
     text = (TextView) this.findViewById(R.id.textView3); 
     tvscore = (TextView) findViewById(R.id.score); 

     timer(); 
    } 

    public void gameover() { 
     Intent intent = new Intent(this, GameOverScreen.class); 
     startActivity(intent); 
    } 

    public void onClick (View view) { 
     score++; 
     tvscore.setText(String.valueOf(score)); 
     timer(); 
    } 

    public void timer(){ 
     new CountDownTimer(5000, 10) { 
      public void onTick(long millisUntilFinished) { 
       text.setText(""+String.format("%02d:%03d", 
         TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished)), 
         TimeUnit.MILLISECONDS.toMillis(millisUntilFinished) - TimeUnit.SECONDS.toMillis(TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished)) 
         )); 
       if(animationRunning) { 
        cancel(); 
       } 
      } 
      public void onFinish() { 
       text.setText("Too slow."); 
       gameover(); 
      } 
     }.start(); 
    } 
} 
+0

尝试调用取消方法为您倒计时 – Anjali

回答

2

这里是为了实现你想要的简单和复杂的方式。

在全球层面

CountDownTimer mCountDownTimer ; 

定义CountDownTimer的对象里面你onCreateView:

mCountDownTimer = new CountDownTimer(5000, 10) { 
     public void onTick(long millisUntilFinished) { 
      text.setText(""+String.format("%02d:%03d", 
      TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished)), 
      TimeUnit.MILLISECONDS.toMillis(millisUntilFinished) - TimeUnit.SECONDS.toMillis(TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished));   
      } 

     @Override 
     public void onFinish() { 
      text.setText("Too slow."); 
      gameover(); 
     } 
    }; 
mCountDownTimer.start(); 

在的onClick()

public void onClick (View view) 
    { 
     mCountDownTimer.cancel(); 
     score++; 
     tvscore.setText(String.valueOf(score)); 
     mCountDownTimer.start(); 

    } 
+0

只是要了解:是以某种方式取消计时器,还是它对我的问题有帮助? –

+0

调用mCountDownTimer.cancel();将取消定时器,所以onFinished()将不会被调用。 –

+0

它的工作,谢谢 –

0

更新您的计时器这样的代码:

private boolean isTimerCanceled = false; 

public void timer(){ 
     new CountDownTimer(5000, 10) { 
      public void onTick(long millisUntilFinished) { 
       text.setText(""+String.format("%02d:%03d", 
         TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished)), 
         TimeUnit.MILLISECONDS.toMillis(millisUntilFinished) - TimeUnit.SECONDS.toMillis(TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished)) 
         ));      
       if(animationRunning) 
       { 
        isTimerCanceled = true; 
        cancel(); 
       } else{ 
        isTimerCanceled = false; 
       }    
      } 
      public void onFinish() 
      { 
       if (!isTimerCanceled){ 
       text.setText("Too slow."); 
       gameover();  
       } 
      } 
     }.start();  
}   
+0

我会尝试一下,谢谢! –

+0

它不能解决我的问题。五秒钟后,无论如何,它开始'gameover'方法 –

+0

可以实现而无需维护国旗。 –