1

「開始」と「一時停止」の 2 つのボタンと 1 つの Textview があります。

私が抱えている問題は、一時停止ボタンを押してから開始ボタンを押すと、ストップウォッチが中断したところから開始されないことです。

助けてくれてありがとう

public class StopWatch extends Activity {
    /** Called when the activity is first created. */

    private TextView timeflg;
    private Button startButton;
    private Button pauseButton;
    private long mStartTime = 0L;
    private Handler mHandler = new Handler();
    long millis = 0L;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        if (mStartTime == 0L) {
            mStartTime = SystemClock.uptimeMillis();
            mHandler.removeCallbacks(mUpdateTimeTask);
            mHandler.postDelayed(mUpdateTimeTask, 0);


            }

            timeflg = (TextView) findViewById(R.id.timeflag);

            startButton = (Button) findViewById(R.id.start);
            startButton.setOnClickListener(new View.OnClickListener() {
                public void onClick(View view){

                    mHandler.postDelayed(mUpdateTimeTask, 0);

                }
            });

            pauseButton = (Button) findViewById(R.id.pause);
            pauseButton.setOnClickListener(new View.OnClickListener() {
                public void onClick(View view){

                    mHandler.removeCallbacks(mUpdateTimeTask);

                }
            });

    }

    private Runnable mUpdateTimeTask = new Runnable() {
            public void run() {

                    millis = SystemClock.uptimeMillis() - mStartTime;

                    int seconds = (int) (millis / 1000);
                    int minutes = seconds / 60;
                    seconds = seconds % 60;
                    int milliseconds = (int) (millis%1000);
                    timeflg.setText("" + minutes + ":" + String.format("%02d",seconds)+ ":" 
                    + String.format("%03d",milliseconds));
                    mHandler.postDelayed(this,0);
            }

    };



}
4

1 に答える 1

6

問題があります:

millis = SystemClock.uptimeMillis() - mStartTime;

mStartTimeアクティビティの作成時に初期化されます。次に、提示された時間が mStartTime から計算されます。

編集:
あなたはまだそれを理解していないようです。

開始ボタンを押したときに mStartTime を初期化します。これは現在の経過開始時間です。

        startButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view){
                mStartTime = SystemClock.uptimeMillis();
                mHandler.postDelayed(mUpdateTimeTask, 0);
            }
        });

mCurrenLapse 時間を計算します。表示時間は、過去の経過時間と現在の経過時間です。

    private Runnable mUpdateTimeTask = new Runnable() {
        public void run() {
                mCurrentLapse = SystemClock.uptimeMillis() - mStartTime;
                //
                long displayTime = mTime + mCurrentLapse;
                .
                .
                .

合計時間はすべての経過時間です。一時停止をクリックすると、現在の経過時間が合計時間に追加されます。

        pauseButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view){
                mTime += mCurrentLapse;
                mHandler.removeCallbacks(mUpdateTimeTask);
            }
        });
于 2012-06-10T19:02:23.300 に答える