Как запустить хронометр в обратном порядке в Android?
cmtr.setText(finalTime);
cmtr.setBase(SystemClock.elapsedRealtime());
timetest = SystemClock.elapsedRealtime();
Log.d("SETTIME: ", ""+timetest);
cmtr.start();
eltime = SystemClock.elapsedRealtime();
Log.d("ELapsed: ", ""+eltime);
Примечание: я хочу запустить свой хронометр в обратном порядке. как я установил хронометр 10 секунд. теперь, я хочу начать с 10 до 0 секунд в обратном порядке. так кто может помочь получить это решение? Большое вам спасибо заранее.
Ответы
Ответ 1
Вы не можете, виджет Chronometer подсчитывает только ту цель, для которой она была создана. Если вы хотите отсчитать, используйте CountDownTimer (на странице Android SDK содержится конкретный пример, где обновляется TextView) или сверните собственное решение.
Эти классы являются тривиальными обертками, чтобы сэкономить вам некоторую типизацию. Вам действительно не должно быть неприятно писать альтернативную реализацию, если они не соответствуют вашим конкретным потребностям.
[Обновление]
Как добавил Роналдо Баия в примечаниях, поскольку API 24 Хронометр фактически предлагает это функционально с помощью метода setCountDown.
Ответ 2
Вы не можете виджет хронометра для подсчета голосов. используйте пример CountDownTimer ниже
здесь мой отсчет начинается с 01:45 mins 1sec = 1000
CountDownTimer cT = new CountDownTimer(100000, 1000) {
public void onTick(long millisUntilFinished) {
String v = String.format("%02d", millisUntilFinished/60000);
int va = (int)( (millisUntilFinished%60000)/1000);
textView.setText("seconds remaining: " +v+":"+String.format("%02d",va));
}
public void onFinish() {
textView.setText("done!");
}
};
cT.start();
Ответ 3
Также можно использовать setCountDown (true);
https://developer.android.com/reference/android/widget/Chronometer.html
Ответ 4
Хорионометр только подсчитывает. но мы можем сделать обратную связь с этим небольшим трюком.
chrono.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
@Override
public void onChronometerTick(Chronometer arg0) {
countUp = (SystemClock.elapsedRealtime() - startTime) / 1000;
if (countUp % 2 == 0) {
chronoRecordingImage.setVisibility(View.VISIBLE);
} else {
chronoRecordingImage.setVisibility(View.INVISIBLE);
}
int min = (int) (countUp/60);
int sec = (int) (countUp%60);
Utility.printMessage(min+":"+sec);
int newCount = MAX_TIME - (int) countUp; // MAIN LOGIC
String asText = String.format("%02d",(newCount / 60)) + ":"
+ String.format("%02d", (newCount % 60));
chrono.setText(asText);
if (countUp > MAX_TIME) {
//time complete
}
}
});