Если вы посмотрите на источник класса Chronometer, вы увидите, что он не хранит истекшее время в поле и вычисляет его внутренне каждый раз, когда ему необходимо обновить дисплей.
Тем не менее, относительно легко сделать то же самое в вашем собственном коде:
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, это то, что вы не можете использовать его в качестве секундомера, который запускается, останавливается и перезапускается снова. Когда он работает, он всегда будет показывать время, прошедшее с момента его последней перезагрузки, независимо от того, сколько раз и на сколько вы его остановили за это время . Когда он остановлен, он просто перестает обновлять дисплей.
Если вам нужен что-то вроде секундомера, вам придется создать подкласс Chronometer или, возможно, создать свою собственную версию, используя source .