2012-05-12 1 views
0

私はAndroid用ストップウォッチアプリケーションを作っています。停止する時間をクリックすると停止し、開始を再度クリックすると再開する時間が必要です。私はhttp://www.goldb.org/stopwatchjava.htmlクラスを使用しています。現在のところ、[スタート]ボタンをクリックすると時間が再開されますが、2回目の後に[停止]をクリックすると、悪い時間が表示されます。再び開始ボタンを押すと、時間が正しく再開されます。ここに私のコードは次のとおりです。Android StopWatch - 時間を再開する方法

Handler mHandler = new Handler() 
{ 
    @Override 
    public void handleMessage(Message msg) { 
     super.handleMessage(msg); 
     switch (msg.what) { 
     case MSG_START_TIMER: 
      timer.start(); //start timer 
      mHandler.sendEmptyMessage(MSG_UPDATE_TIMER); 
      break; 

     case MSG_UPDATE_TIMER: 

      time = timer.getElapsedTime() + timeStoped; 

      hh = time/3600000; 
      hours.setText("" + formatter.format(hh)); 
      time = time - hh * 3600000; 

      mm = time/60000; 
      minutes.setText("" + formatter.format(mm)); 
      time = time - mm * 60000; 

      ss = time/1000; 
      seconds.setText("" + formatter.format(ss)); 
      time = time - ss * 1000; 

      millis.setText("" + formatter.format(time/10)); 

      mHandler.sendEmptyMessageDelayed(MSG_UPDATE_TIMER,REFRESH_RATE); //text view is updated every second, 
      break;  
                      //though the timer is still running 
     case MSG_STOP_TIMER: 

      mHandler.removeMessages(MSG_UPDATE_TIMER); // no more updates. 
      timer.stop();//stop timer 

      time = timer.getElapsedTime(); 
      timeStoped = timeStoped + time; 

      hh = time/3600000; 
      hours.setText("" + formatter.format(hh)); 
      time = time - hh * 3600000; 

      mm = time/60000; 
      minutes.setText("" + formatter.format(mm)); 
      time = time - mm * 60000; 

      ss = time/1000; 
      seconds.setText("" + formatter.format(ss)); 
      time = time - ss * 1000; 

      millis.setText("" + formatter.format(time/10)); 

      break; 

     default: 
      break; 
     } 
    } 
}; 

リスナーがボタンスタート/ストップのために:

startBtn.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      if (!startIsPressed) { 
       mHandler.sendEmptyMessage(MSG_START_TIMER); 
       startIsPressed = true; 
       startBtn.setText(R.string.stop); 
      } else { 
       startIsPressed = false; 
       startBtn.setText(R.string.start); 
       mHandler.sendEmptyMessage(MSG_STOP_TIMER); 
      } 
     } 
    }); 
+0

あなたのプロジェクトにhttp://www.goldb.org/stopwatchjava.htmlからStopwatchクラスを追加しましたか? –

+0

はい、追加しました。問題は、timer.start()です。スタートが押されるたびに呼び出されます(悪い時間を止めてください)。しかし、私はそれを解決するための手がかりを持っていません。 – dgjorg

+0

あなたの問題についてもっと詳しく説明できますか?私はあなたを得ていませんか? –

答えて

2

ソリューションを置き換えることです:

time = timer.getElapsedTime(); 
    timeStoped = timeStoped + time; 

 time = timer.getElapsedTime() + time; 
     timeStoped = timeStoped + time; 

そして、これらは同じです

with:

time = timer.getElapsedTime() + timeStopped; 
    timeStopped = time; 
0

時間で時間を設定する簡単な方法:分:秒の形式は次のようになります。

Format formatter = new SimpleDateFormat("hh mm ss SSS"); 
String[] parsedTime = formatter.format(time).split(" "); 
hours.setText(parsedTime[0]); 
minutes.setText(parsedTime[1]); 
seconds.setText(parsedTime[2]); 
millis.setText(parsedTime[3]); 

複数の停止後に正確な時間を維持するには、これを変更する必要があります。

 time = timer.getElapsedTime(); 
     timeStoped = timeStoped + time; 
以前にチェック何かに

は多分このように、同様timeを経過:

 time += timer.getElapsedTime(); 
     timeStoped += time; 
関連する問題