AndroidはChronometerを使ってタイマーを実現します.
1680 ワード
AndroidはChronometerを使ってタイマーを実現します.
スレッドを使ってHandlerを組み合わせることなく、直接Chronometerを使ってタイマーを実現し、スタート、一時停止、リセットすることができます.
一、ChronometerはTextViewのサブクラスで、使い方は一般のコントロールと一致しています.レイアウトは簡単で、直接コントロールをドラッグ&ドロップすればいいです.
ボタンをクリックしてイベントを呼び出します.Chronometer timer
1、スタートタイム:timer.start()
2、タイムアウト:timer.stop()
3、リセットタイマ:timer.setBase(SystemClock.elappsedRealtime();
ただし、一時停止ボタンをクリックしても、表面上の一時停止だけで、実際にはまだバックグラウンドで時間を計測し続けていますので、スタートボタンを押すと時間の変化が分かります.
三、原因:初運行時timer.start()以降
timer.set Baseをデフォルトで設定します.現在の時間からタイマーを開始して、初めて運行するタイムと現在の時間の差を計算して、タイムリーな効果を達成します.タイムアウトまたは停止した後、タイムは変わりません.そのため、タイマーは実際にまだ運転を続けています.
四、解決方法:
変数bootlean falgの初期値を増加してfalse、long stopTimeが一時停止をクリックして現在時間を記録して同時にfalgをtrue、long baseを記録してタイマーのBase時間(つまりタイムアウト開始時間)を記録して、再度スタートボタンをクリックして、現在時間とstopTimeの差額を計算します.最後にtimer.setBase(base+t).これで本当の意味でのタイマーが完成します.リセットボタンのクリックイベントでfalgをfalseにセットします.
詳細は以下のコードを参照してください.
スレッドを使ってHandlerを組み合わせることなく、直接Chronometerを使ってタイマーを実現し、スタート、一時停止、リセットすることができます.
一、ChronometerはTextViewのサブクラスで、使い方は一般のコントロールと一致しています.レイアウトは簡単で、直接コントロールをドラッグ&ドロップすればいいです.
二、使用:ボタンをクリックしてイベントを呼び出します.Chronometer timer
1、スタートタイム:timer.start()
2、タイムアウト:timer.stop()
3、リセットタイマ:timer.setBase(SystemClock.elappsedRealtime();
ただし、一時停止ボタンをクリックしても、表面上の一時停止だけで、実際にはまだバックグラウンドで時間を計測し続けていますので、スタートボタンを押すと時間の変化が分かります.
三、原因:初運行時timer.start()以降
timer.set Baseをデフォルトで設定します.現在の時間からタイマーを開始して、初めて運行するタイムと現在の時間の差を計算して、タイムリーな効果を達成します.タイムアウトまたは停止した後、タイムは変わりません.そのため、タイマーは実際にまだ運転を続けています.
四、解決方法:
変数bootlean falgの初期値を増加してfalse、long stopTimeが一時停止をクリックして現在時間を記録して同時にfalgをtrue、long baseを記録してタイマーのBase時間(つまりタイムアウト開始時間)を記録して、再度スタートボタンをクリックして、現在時間とstopTimeの差額を計算します.最後にtimer.setBase(base+t).これで本当の意味でのタイマーが完成します.リセットボタンのクリックイベントでfalgをfalseにセットします.
詳細は以下のコードを参照してください.
private Button btn_start;
private Button btn_stop;
private Button btn_reset;
private Chronometer timer;
long stopTime;
long base;
private boolean falg = false;
case R.id.btn_start: {
if (falg) {
//
long t = SystemClock.elapsedRealtime() - stopTime;
timer.setBase(base + t);
}
//
timer.start();
}
break;
case R.id.btn_stop: {
stopTime = SystemClock.uptimeMillis();
timer.stop();
falg = true;
base = timer.getBase();
}
break;
case R.id.btn_reset: {
timer.setBase(SystemClock.elapsedRealtime());
falg = false;
}
break;
プロジェクトのダウンロード先:http://download.csdn.net/detail/ouyangjiluo/7096461 ポイントは不要です