使倒数计时器从 10 秒变为 1 秒



我有一个倒数计时器,它以 1 秒为增量从 10000 毫秒倒计时到 0 毫秒,以使按钮在 10 秒后可点击。虽然计时器是准确的并且按照代码所说的去做,但我想改变秒的表达方式,但我不知道如何。

.java:

void startTimer() {
cTimer = new CountDownTimer(10000, 1000) {
public void onTick(long millisUntilFinished) {
c.setText("Please wait " + millisUntilFinished/1000 + " seconds");
thx.setText(millisUntilFinished/1000 + "");
thx.setAlpha(.5f);
thx.setClickable(false);
}
public void onFinish() {
c.setText("done");
thx.setText("ready");
thx.setAlpha(1f);
thx.setClickable(true);
}
};
cTimer.start();
}

输出(每秒):9, 8, 7, 6, 5, 4, 3, 2, 1, (still 1), ready

期望:(每秒):10, 9, 8, 7, 6, 5, 4, 3, 2, 1, ready

谢谢

编辑:

我在倒计时中添加了 1,thx.setText(((millisUntilFinished/1000) + 1) + "");

新输出:10, 9, 8, 7, 6, 5, 4 ,3 , 2, (Still 2), ready

近。。。但不完全是。

这只是我在使用 CountDownTimer 时对 CountDownTimer 的调查 几个月前,它在我的应用程序中工作正常。

public void onTick(long millisUntilFinished)

这个millisUntilDone将以毫秒为单位给出剩余时间,最后1000毫秒是调用onFinish()方法,所以onTick方法将被调用,直到剩余时间超过(1000(对于OnFinish)+ 1000(对于计数器))毫秒,如果最后剩余的毫秒小于2000毫秒,它将跳过onTick(),并在计时器结束时直接调用onFinish()。有关更多详细信息,请参阅此源中的处理程序方法。

所以主要问题是当我们给出一些 X(我们的情况为 10000)毫秒时,但要启动计数器需要大约 50 到 150 毫秒,因此,如果我们在总时间中添加该毫秒,我们将得到计数器直到结束,

所以你可以这样尝试,没有任何变化,只是我在你的总时间增加了 150 毫秒。

void startTimer() {
cTimer = new CountDownTimer(10150, 1000) {
public void onTick(long millisUntilFinished) {
c.setText("Please wait " + millisUntilFinished/1000 + " seconds");
thx.setText(millisUntilFinished/1000 + "");
thx.setAlpha(.5f);
thx.setClickable(false);
}
public void onFinish() {
c.setText("done");
thx.setText("ready");
thx.setAlpha(1f);
thx.setClickable(true);
}
};
cTimer.start();
}

让我知道它是否有效,如果你问我为什么你不使用处理程序,我可以在内部使用处理程序说 CountDownTime。

试试这个计数器:

public void CountDown() {
final TextView textic = (TextView) findViewById(R.id.tvConuter);
CountDownTimer Count = new CountDownTimer(10000, 1000) {
public void onTick(long millisUntilFinished) {
long str = millisUntilFinished / 1000;
String TimeFinished = String.valueOf(str);
textic.setText(TimeFinished);
}
public void onFinish() {
textic.setText("STOP");
}
};
Count.start();
}

这对我来说非常有效。

我建议使用Timer()Handler()类。

int tick = 0;
Handler handler = new Handler();
Runnable r = new Runnable() {void run(){
if (i < 10) {
handler.postDelayed()}
else {
//finished
tick = 0;
}}};

开始:

handler.post(r);

new CountDownTimer(10000, 1000) {
public void onTick(long millisUntilFinished) {
mTextField.setText("seconds: " + millisUntilFinished / 1000);
//here you can have your logic to set text to edittext
}
public void onFinish() {
mTextField.setText("done!");
}
}.start();
private void countDownTimer(int seconds) {
countDownTimer = new CountDownTimer(seconds * 1000L, 1000 - 500) {
public void onTick(long millisUntilFinished) {
//Convert to seconds
int secondsUnillFinished = (int) (millisUntilFinished / 1000);
//Set text to seconds
textView.setText(String.valueOf(secondsUnillFinished));
//At zero, do something
if(secondsUnillFinished == 0) {
countDownTimer.cancel();
textView.setVisibility(View.INVISIBLE);
}
}
@SuppressLint("SetTextI18n")
public void onFinish() {
//Dont put anything here
}
}.start();
}

最新更新