0

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

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;
        }
    }
};

ボタン Start/Stop のリスナー:

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);
            }
        }
    });
4

2 に答える 2

2

解決策は、次のものを置き換えることです。

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

と:

    time = timer.getElapsedTime() + timeStopped;
    timeStopped = time;
于 2012-05-13T08:13:40.550 に答える
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() + time;
        timeStoped = timeStoped + time;

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

        time += timer.getElapsedTime();
        timeStoped += time;
于 2012-05-12T16:26:08.857 に答える