就是setBase,這個方法是用來設定一個基準點,也就是我從這個基準點開始計時。
假設我們的程式是這樣寫,就會發生問題,
當我們呼叫start()後,等到過了25秒,按下停止,
再過了15秒後,我們再按下開始讓它繼續計時,
就會發現不是從25秒往下算,而是從40秒開始算。
這是因為計時器從第一次按下開始的時間做為基準點,所以是40秒(25+15)
btnStart.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { chronometer.start(); } }); btnStop.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { chronometer.stop(); } });
2.為了解決上述的問題,我們需要額外利用一個參數(escapeTime)及setBase方法
在按下停止時先記錄已經跑過的時間,
然後待下一次按開始繼續計時的時候,在加上去
MainActivity.java
import android.app.Activity; import android.os.Bundle; import android.os.SystemClock; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Chronometer; public class MainActivity extends Activity { long escapeTime = 0; /* Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final Chronometer chronometer = (Chronometer) findViewById(R.id.chronometer1); final Button btnStart = (Button) findViewById(R.id.button1); final Button btnStop = (Button) findViewById(R.id.button2); final Button btnReset = (Button) findViewById(R.id.button3); btnStart.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // SystemClock.elapsedRealtime()方法會回傳從開機到現在的時間 // 把這個時間做為一個Base,從這個Base開始計時 chronometer.setBase(SystemClock.elapsedRealtime() + escapeTime); chronometer.start(); } }); btnStop.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { //getBase是用來取得上一次setBase()的時間"chronometer.setBase(SystemClock.elapsedRealtime() + escapeTime);" escapeTime = chronometer.getBase() - SystemClock.elapsedRealtime(); chronometer.stop(); } }); btnReset.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { chronometer.setBase(SystemClock.elapsedRealtime()); chronometer.stop(); escapeTime = 0; } }); } }
3.layout即拉入一個計時器,三個按鈕。
res/layout/activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Chronometer android:id="@+id/chronometer1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="14dp" android:text="Chronometer" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:text="開始(start)" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:text="停止(stop)" /> <Button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="18dp" android:text="重置(reset)" /> </LinearLayout>結果:
沒有留言:
張貼留言