3

アプリの1つでストップウォッチを使用して実験していますが、開始時に秒数のカウントを開始し、停止時にカウントを停止するところまで到達しました。私の問題は、それが 60 秒後も続くことです。たとえば、2 分間待った場合、120 秒になります。

だから私の質問は、秒が60に達すると、分が1つ増えて秒が最初からやり直すようにするにはどうすればよいですか?

したがって、:120 の代わりに 2:00 になります。ここに私が持っているコードがあります:

final int MSG_START_TIMER = 0;
final int MSG_STOP_TIMER = 1;
final int MSG_UPDATE_TIMER = 2;

Stopwatch timer = new Stopwatch();
final int REFRESH_RATE = 100;

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

        case MSG_UPDATE_TIMER:              
            tvTextView.setText(":"+ timer.getElapsedTimeSecs());                
            mHandler.sendEmptyMessageDelayed(MSG_UPDATE_TIMER,REFRESH_RATE); 
            break;                                  
        case MSG_STOP_TIMER:
            mHandler.removeMessages(MSG_UPDATE_TIMER); 
            timer.stop();
            tvTextView.setText("");
            break;

        default:
            break;
        }
    }
};

また、次のとおりです。

 public void start(View v) {
    mHandler.sendEmptyMessage(MSG_START_TIMER);
}

public void stop(View v) {
    mHandler.sendEmptyMessage(MSG_STOP_TIMER);
}

ちなみに、私はこの質問を見ましたが、彼の問題はTimeSpanにあり、ストップウォッチとは異なることを正しく理解している場合(間違っている場合は修正してください)。お時間とご尽力いただきありがとうございます。

4

2 に答える 2

8

秒単位の時間で開始する場合:

display = String.format("%d:%02d", seconds / 60, seconds % 60);

分が 0 の場合に分が必要ない場合:

if (seconds < 60)
    display = String.format("%02d", seconds);
else
    display = String.format("%d:%02d", seconds / 60, seconds % 60);
于 2012-08-12T00:50:30.817 に答える
2

文字列を作成する関数を作成するだけです。これを手の届くところに隠します。

    public String NumToStr(long i){
        if (i < 10 ) {
            return ("0" + Long.toString(i));
        }
        return Long.toString(i);
    }

これは、10 未満の任意の数値を取得し、数値の前に「0」を含む文字列を返します。

つまり、7 を送信して "07" を取得し、次に 55 を送信して "55" を取得します。次に、文字列を一緒に追加します。

    Hour + ":" + Minute + ":" + Seconds;

「07:55:05」が表示されます

次は入れるだけ

    if (seconds > 60) {
        seconds = 0
        minutes++; 
    }
    if (minutes > 60) {
        minutes = 0
        hours++;
    }
    if (hours > 12) {
        hours = 0
    }

すべての点で、これは基本的なものです。

これらすべてをどこに置くべきですか?好きなところに。ただし、コードの一部をやり直す必要があります。

     case MSG_UPDATE_TIMER:
        long TimePassed;
        TimePassed = Seconds;
        if (Minutes > 0) {
            TimePassed = TimePassed  + (60 * Minutes);
        }
        if (Hours > 0) {
            TimePassed = TimePassed + (60 * 60 * Hours);
        }

        Seconds =  (timer.getElapsedTimeSecs()- TimePassed );

        if (Seconds > 60) {
            Seconds = 0
            Minutes++; 
        }
        if (Minutes > 60) {
            Minutes = 0
            hours++;
        }
        String timeSecs = NumToStr(Seconds);
        String timeMins = NumToStr(Minutes);
        String timeHours = NumToStr(Hours);

        String Time = timeHours + ":" + timeMins + ":" + timeSecs; 

        tvTextView.setText(Time);   

        mHandler.sendEmptyMessageDelayed(MSG_UPDATE_TIMER,REFRESH_RATE); 
        break;  
于 2012-08-12T00:30:12.940 に答える