如果你看看天文台类的源代码,你会看到,它不经过时间存储在一个领域,它的每一次内部计算它,它需要更新显示。
但是它是比较容易做同样在自己的代码:
long elapsedMillis = SystemClock.elapsedRealtime() - chronometerInstance.getBase();
这假定您已经启动您的时钟是这样的:
chronometerInstance.setBase(SystemClock.elapsedRealtime());
chronometerInstance.start();
这里有一个完整的例子:
public class ChronoExample extends Activity {
Chronometer mChronometer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);
mChronometer = new Chronometer(this);
layout.addView(mChronometer);
Button startButton = new Button(this);
startButton.setText("Start");
startButton.setOnClickListener(mStartListener);
layout.addView(startButton);
Button stopButton = new Button(this);
stopButton.setText("Stop");
stopButton.setOnClickListener(mStopListener);
layout.addView(stopButton);
Button resetButton = new Button(this);
resetButton.setText("Reset");
resetButton.setOnClickListener(mResetListener);
layout.addView(resetButton);
setContentView(layout);
}
private void showElapsedTime() {
long elapsedMillis = SystemClock.elapsedRealtime() - mChronometer.getBase();
Toast.makeText(ChronoExample.this, "Elapsed milliseconds: " + elapsedMillis,
Toast.LENGTH_SHORT).show();
}
View.OnClickListener mStartListener = new OnClickListener() {
public void onClick(View v) {
mChronometer.start();
showElapsedTime();
}
};
View.OnClickListener mStopListener = new OnClickListener() {
public void onClick(View v) {
mChronometer.stop();
showElapsedTime();
}
};
View.OnClickListener mResetListener = new OnClickListener() {
public void onClick(View v) {
mChronometer.setBase(SystemClock.elapsedRealtime());
showElapsedTime();
}
};
}
天文台一个有点令人困惑的事情是,你不能真正使用它作为开始,停止并重新启动的秒表。当它运行时,它将始终显示自上次重置之后所经过的时间,无论多少次,以及您在此期间停止了多长时间,都会显示。停止时,只停止更新显示。
如果你需要类似秒表的东西,你将不得不继承Chronometer或者使用source创建你自己的版本。
**天文台**现在支持`getText()` – gnB 2017-08-11 00:07:33