2

開始をクリックすると、「ストップウォッチ」がカウントを開始しました。一時停止を押しましたが、テキストビューのみが一時停止しました。再開していません。まだバックグラウンドで実行されているためです。停止した場所から再開する必要があります。

ここに私のドットJavaコードがあります:

package com.example.chronometer2;

import com.example.chronometer.R;

import android.app.Activity;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.View;
import android.widget.Button;
import android.widget.Chronometer;

public class ChronometerApp extends Activity {
   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_chronometer);

       final Chronometer myChronometer = (Chronometer)findViewById(R.id.my_chronometer);
       Button buttonStart = (Button)findViewById(R.id.buttonstart);
       Button buttonStop = (Button)findViewById(R.id.buttonstop);
       Button buttonReset = (Button)findViewById(R.id.buttonreset);

       buttonStart.setOnClickListener(new Button.OnClickListener(){

   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    myChronometer.start();
   }});

       buttonStop.setOnClickListener(new Button.OnClickListener(){

   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    myChronometer.stop();

   }});

       buttonReset.setOnClickListener(new Button.OnClickListener(){

   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    myChronometer.setBase(SystemClock.elapsedRealtime());

   }});

   }
}
4

5 に答える 5

4

クロノメーターが停止したときの経過時間を含む変数を定義する必要があります

timeWhenStopped = chronometer.getBase() - SystemClock.elapsedRealtime();

そして、もう一度開始するときに、タイマーとtimeWhenStoppedを設定します

chronometer.setBase(SystemClock.elapsedRealtime() + timeWhenStopped);

クロノメーターをリセットするには

chronometer.setBase(SystemClock.elapsedRealtime());
chronometer.stop();
timeWhenStopped = 0;

クロノメーターが実行されているかどうかを定義するために、追加の変数を追加する必要があるかもしれません

于 2012-10-11T08:06:31.297 に答える
3

たとえば、timeWhenStopped など、変数になった時間を覚えておく必要があります。そして、クロノメーターを開始するたびに、値を 0 ではなく数秒から開始しますか? メソッド setBase で設定できます。ここでは、アクションの開始、一時停止、再起動を含む 3 つのボタンがあります。幸運を!

public class MainActivity extends Activity {
/** Called when the activity is first created. */
long timeWhenStopped = 0;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final Button butStart = (Button) findViewById(R.id.button1);
    final Button butStop = (Button) findViewById(R.id.button2);
    final Button butReset = (Button) findViewById(R.id.button3);

    final Chronometer Mchronometer = (Chronometer) findViewById(R.id.chronometer1);

    butStart.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {                  Mchronometer.setBase(SystemClock.elapsedRealtime()
                            +timeWhenStopped);
            Mchronometer.start();
        }
    });

    butStop.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            timeWhenStopped = Mchronometer.getBase() - SystemClock.elapsedRealtime();
            Mchronometer.stop();
        }
    });

    butReset.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            Mchronometer.setBase(SystemClock.elapsedRealtime());
            Mchronometer.stop();
            timeWhenStopped = 0;
        }
    });
    }
于 2012-12-22T13:19:44.977 に答える
1

@fabzy のコードは機能しますが、算術論理は機能しないため、問題が発生する可能性があります。

mTimeWhenStopped正の数 (タイマーの経過時間) である必要がありますが、fabzy のセットアップでは常に負です。mTimeWhenStopped比較、表示など、タイマーの実行以外に数値を使用している場合、これは違いを生みます。

以下は、減算演算を逆にした同じコードです。また、タイマーが実行されているかどうかを表すオプションのブール値も追加しました。

private void resumeTimer() {
    mTimer.setBase(SystemClock.elapsedRealtime() - mTimeWhenStopped);
    mTimer.start();
    mTimerIsRunning = true;

}

private void stopTimer() {
    mTimer.stop();
    mTimeWhenStopped = SystemClock.elapsedRealtime() - mTimer.getBase();
    mTimerIsRunning = false;
}

private void resetTimer() {
    mTimer.stop();
    mTimer.setBase(SystemClock.elapsedRealtime());
    mTimeWhenStopped = 0;
    mTimerIsRunning = false;
}
于 2014-04-07T00:51:08.963 に答える
1

クロノメーターが開始されてから経過した時間を追跡する変数が必要になります

もっと見る : Android_Chronometer一時停止

于 2012-10-11T07:59:32.970 に答える
0

PauseableChronometerこのためのクラスを作りました。

import android.content.Context;
import android.os.SystemClock;
import android.util.AttributeSet;
import android.widget.Chronometer;

public class PausableChronometer extends Chronometer {

    private long timeWhenStopped = 0;

    public PausableChronometer(Context context) {
        super(context);
    }

    public PausableChronometer(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public PausableChronometer(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    public void start() {
        setBase(SystemClock.elapsedRealtime()+timeWhenStopped);
        super.start();
    }

    @Override
    public void stop() {
        super.stop();
        timeWhenStopped = getBase() - SystemClock.elapsedRealtime();
    }

    public void reset() {
        stop();
        setBase(SystemClock.elapsedRealtime());
        timeWhenStopped = 0;
    }

    public long getCurrentTime() {
        return timeWhenStopped;
    }

    public void setCurrentTime(long time) {
        timeWhenStopped = time;
        setBase(SystemClock.elapsedRealtime()+timeWhenStopped);
    }
}
于 2014-10-20T15:22:56.557 に答える