2016-11-02 15 views
2

私は100(完全)から0(空)まで減少するプログレスバーを更新するカウントダウンタイマーを使用していますが、一時停止するとタイマーを一時停止したいアプリの再開時に再起動してください。Androidスタジオプログレスバーのカウントダウンタイマーの一時停止と再開

public class MyCountDownTimer extends CountDownTimer { 


    public MyCountDownTimer(long millisInFuture, long countDownInterval) { 
     super(millisInFuture, countDownInterval); 
    } 

    @Override 
    public void onTick(long millisUntilFinished) { 
     int progress = (int) (millisUntilFinished/100); 
     progressBar.setProgress(progress); 
    } 

    @Override 
    public void onFinish() { 
     progressBar.setProgress(0); 
     Intent intent = new Intent(getApplicationContext(), GameOver.class); 
     startActivity(intent); 
     finish(); 
    } 

} 

そして、私の上で作成します:私はそうのようにカウントダウンタイマーを実装

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

    progressBar = (ProgressBar)findViewById(R.id.timerBar); 
    progressBar.setProgress(100); 
    myCountDownTimer = new MyCountDownTimer(10000, 10); 
    myCountDownTimer.start(); 
} 

答えて

1

をあなたはのとonResume方法に変更されますあなたのMyCountDownTimerクラスのbooleanを追加することができますあなたのアクティビティ// ADDEDコメントを確認して、この作業を行うために必要な変更を確認します。

public class MyActivity extends Activity { 

    MyCountDownTimer myCountDownTimer; 

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

     progressBar = (ProgressBar)findViewById(R.id.timerBar); 
     progressBar.setProgress(100); 
     myCountDownTimer = new MyCountDownTimer(10000, 10); 
     myCountDownTimer.start(); 
    } 

    // ADDED 
    @Override 
    public void onPause() { 
     super.onPause(); // Always call the superclass method first 
     myCountDownTimer.pause(); 
    } 

    // ADDED 
    @Override 
    public void onResume() { 
     super.onResume(); // Always call the superclass method first 
     myCountDownTimer.resume(); 
    } 

} 


public class MyCountDownTimer extends CountDownTimer { 

    // ADDED 
    private boolean pause; 

    public MyCountDownTimer(long millisInFuture, long countDownInterval) { 
     super(millisInFuture, countDownInterval); 
    } 

    // ADDED 
    public void pause() { 
     pause = true; 
    } 

    // ADDED 
    public void resume() { 
     pause = false; 
    } 

    @Override 
    public void onTick(long millisUntilFinished) { 
     int progress = (int) (millisUntilFinished/100); 

     // ADDED 
     if (!pause) { 
      progressBar.setProgress(progress); 
     } 
    } 

    @Override 
    public void onFinish() { 
     // ADDED 
     isRunning = false; 

     progressBar.setProgress(0); 
     Intent intent = new Intent(getApplicationContext(), GameOver.class); 
     startActivity(intent); 
     finish(); 
    } 
} 
+0

これは、カウントダウンタイマーがまだバックグラウンドで実行され、0 – Zorqe

+0

おおそのことについて考えていなかったに達したときに活動を終了しますが動作します。あなたができることは:一時停止するときにタイマー値を保存し、現在のタイマーをキャンセルし、最後に残りの時間で新しいタイマーを再始動させることです。残った時間を 'onTick(...)'メソッドに保存することができます。あなたのタイマーを作成するときは、 'countDownInterval'を低く設定して精度を上げてください。 – WannaGetHigh

関連する問題