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にセットします.
詳細は以下のコードを参照してください.
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 ポイントは不要です