2017-03-12 7 views
-2

私はFootball Match Timerプロジェクトの真中にいます。基本的には、"START 1st half"ボタンを押した後に開始するタイマーの実装を探していますが、一時停止よりも45分がカウントされ、もう一度起動することができます"START 2nd half"(同じボタンになりますが、試合全体を通して変化した)。その後、45分から90分になります。一定時間実行するタイマーの作り方

私はHandler()Runnable()onClickListener()を使ってこれを実現しようとしてきたが、それは私のために全く機能しません:(あなたは?私

Handler timerHandler = new Handler(); 
Runnable timerRunnable = new Runnable() { 

@Override 
public void run() { 

     showTimeRemaining(); 
     timerHandler.postDelayed(this, 500); 
    } 
}; 
     b.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Button b = (Button) v; 
      startButton(v); 
      if (b.getText().equals("Mecz trwa")) {  
       timerHandler.removeCallbacks(timerRunnable);    
       b.setEnabled(true); 
      } else { 
       startTime = System.currentTimeMillis(); 
       timerHandler.postDelayed(timerRunnable, 0); 
       b.setText("Mecz trwa"); 
       b.setEnabled(false); 
      } 
     } 
    }); 

    public void showTimeRemaining() { 
    long millis = System.currentTimeMillis() - startTime; 
    int seconds = (int) (millis/1000); 
    int minutes = seconds/60; 
    seconds = seconds % 60; 


    timerTextView = (TextView) findViewById(R.id.time); 
    timerTextView.setText(String.format("%d:%02d", minutes, seconds)); 
    } 
+1

「動作しない」とはどういう意味ですか? – Sweeper

+0

showTimeRemainingメソッドの時間を更新するときにボタンオブジェクトを使用していないようです。また、loggerまたはsystem.out.Printステートメントを呼び出して、呼び出されているかどうかを確認します。この単純な計算を試してみてください。 intconds =(int)(ミリ秒/ 1000)%60; int minutes =(int)((ミリ秒/(1000 * 60))%60) – albeee

答えて

0

ここに私の提案があります。

まず、HandlerTimerというクラスにカプセル化します。これにより、タイマーの操作が簡単になります。ここに私のバージョンがあります:

import android.os.Handler;

public class Timer { 
    private Handler handler; 
    private boolean paused; 

    private int interval; 

    private Runnable task = new Runnable() { 
     @Override 
     public void run() { 
      if (!paused) { 
       runnable.run(); 
       Timer.this.handler.postDelayed (this, interval); 
      } 
     } 
    }; 

    private Runnable runnable; 

    public int getInterval() { 
     return interval; 
    } 

    public void setInterval(int interval) { 
     this.interval = interval; 
    } 

    public void startTimer() { 
     paused = false; 
     handler.postDelayed (task, interval); 
    } 

    public void stopTimer() { 
     paused = true; 
    } 

    public Timer (Runnable runnable, int interval, boolean started) { 
     handler = new Handler(); 
     this.runnable = runnable; 
     this.interval = interval; 
     if (started) 
      startTimer(); 
    } 
} 

第2に、System.currenTimeMillisを使用しないでください。より操作しやすいものを使用してください。

private int secondsLeft = 60 * 45; 

この変数はゼロになるまで1秒ごとに減分します。次に、タイマーを停止したり、ボタンのテキストなどを変更したりします。このロジックは、ハンドラに使用されるRunnableに入れてください。

関連する問題