2017-09-09 11 views
0

ProgressBarで表示され、正常に終了したカウントダウンタイマーがあります。しかし、残念ながら問題があります。Java Android、カウントダウンタイマー、ProgressBar(先読み)

  1. progressBarは1/5の代わりに0/5で開始します。私は
    public void onFinish() { 
    progresBar.setProgress(100); 
    
    } 
    

前にカウントダウンタイマーの機能をリコールした場合、ディスプレイはしばらくの間、台無しになります4/5進捗
  • に2秒を立ち往生。

    本当にUnityエンジンが足りないのはTime.deltaTimeです。

    countDownTimer2 = new CountDownTimer(5000,1000) { 
         int i = 0; 
         @Override 
         public void onTick(long milliSecondUntilFinished) { 
          i++; 
          progresBar.setProgress((int) i * 100/(5000/1000)); 
         } 
    
         @Override 
         public void onFinish() { 
    
          progresBar.setProgress(100); 
    
         } 
        }.start(); 
    
  • +0

    「カウントダウン機能」を思い出した場合 - 電話をかけている場所でコードを表示できますか?あなたは呼び出しのために同じオブジェクトを使用していますか? おかげ –

    +0

    btnSubmit.setOnClickListener(新View.OnClickListener(){@Override ます。public void onClickの(ビュービュー){ 場合(input.getText():-)。のtoString()。等号(questionNumber)){ rightAnswer ();そう } {wrongAnswer();} getRandomQuestion();} })。 – Jon

    +0

    getRandomQuestion()内のカウントダウンタイマー。 – Jon

    答えて

    1

    あなたはあなたの進歩を設定する前に、あなたのi変数をインクリメントされています

    は、ここに私のコードです。 onTick()が初めて呼び出されたとき、iの値は1です。あなたが設定している進行状況は20で、これは1/5に相当します。これを使用して - また

    @Override 
          public void onTick(long milliSecondUntilFinished) { 
           progresBar.setProgress((int) i * 100/(5000/1000)); 
           i++; 
          } 
    

    を、あなたはより良いunneccesarily i変数を導入するのではなく、進捗状況を見つけるためにmilliSecondUntilFinishedを使用する必要があります。

    ディスプレイの問題については、新しいタイマーを呼び出す前に、すでに実行中のタイマーをキャンセルしていないことを非常に疑う。はいの場合、両方のタイマーは、古いものが終了するまで実行されます(この時点まで、プログレスバーは変わって動作します)。新しいものを開始する前にこれを行ってください

    countDownTimer2.cancel(); 
    

    -

    あなたが以前のようにタイマーを取り消すことができます。

    +0

    ちょうど0/5から始めることができますが、4/5の場合は2秒、 – Jon

    +0

    @ジョン編集を見てください。また、他の問題のコードを投稿してください。つまり、2秒間4/5で立ち往生します。 –

    +0

    どのようなコードを前のカウントダウンタイマーをキャンセルする....両方のタイマーを実行するのを防ぐため – Jon

    0
    use 
    countDownTimer2 = new CountDownTimer(1000,5000) { 
         int i = 0; 
         @Override 
         public void onTick(long milliSecondUntilFinished) { 
          i++; 
          progresBar.setProgress((int) i * 100/(5000/1000)); 
         } 
         @Override 
         public void onFinish() { 
    
          progresBar.setProgress(100); 
    
         } 
        }.start(); 
    
    +0

    新しいCountDownTimer(** 1000,5000 **)を置くとエラーが発生する – Jon