Работает нормально, спасибо, последняя деталь, если я поставлю 5 секунд, он показывает: 5, 4, 3, 2, 1 и 0. В итоге это 6 секунд.
Максим, как я читаю в вашем комментарии к ответу Томаса Мэри, вы хотите избежать дополнительного вызова onTick ().
Вы видите это, потому что оригинальная реализация CountDownTimer впервые вызывает onTick (), как только (без задержки) запускается таймер.
Как удалить 0 в конце?
Для этого вы можете использовать этот модифицированный CountDownTimer:
public abstract class CountDownTimer {
private final long mMillisInFuture;
private final long mCountdownInterval;
private long mStopTimeInFuture;
private boolean mCancelled = false;
public CountDownTimer(long millisInFuture, long countDownInterval) {
mMillisInFuture = millisInFuture;
mCountdownInterval = countDownInterval;
}
public synchronized final void cancel() {
mCancelled = true;
mHandler.removeMessages(MSG);
}
public synchronized final CountDownTimer start() {
mCancelled = false;
if (mMillisInFuture <= 0) {
onFinish();
return this;
}
mStopTimeInFuture = SystemClock.elapsedRealtime() + mMillisInFuture;
onTick(mMillisInFuture);
mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG), mCountdownInterval);
return this;
}
public abstract void onTick(long millisUntilFinished);
public abstract void onFinish();
private static final int MSG = 1;
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
synchronized (CountDownTimer.this) {
if (mCancelled)
return;
final long millisLeft = mStopTimeInFuture - SystemClock.elapsedRealtime();
if (millisLeft <= 0) {
onFinish();
} else {
onTick(millisLeft);
sendMessageDelayed(obtainMessage(MSG), mCountdownInterval);
}
}
}
};
}
Обратите внимание, что вам может потребоваться настроить реализацию в onTick () метод соответственно.