我有一个CountDown计时器,从10000ms到0ms倒计时,每次增量为1秒,以便在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
更近......但不完全。
答案 0 :(得分:1)
尝试这个用于计数器:
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();
}
这对我很有用。
答案 1 :(得分:1)
这只是我在使用CountDownTimer时对CountDownTimer的调查 几个月前,我的申请工作正常。
public void onTick(long millisUntilFinished)
这个millisUntilFinished将以毫秒为单位给出剩余时间,最后1000毫秒是调用onFinish()方法,因此onTick方法将被调用,直到剩余时间超过(1000(对于OnFinish)+ 1000(对于计数器) )毫秒,如果最后剩余的毫秒小于2000毫秒,它将跳过onTick(),并在计时器结束时直接调用onFinish()。有关详细信息,请参阅此来源中的Handler方法。
所以主要的问题是当我们给出一些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();
}
让我知道它是否有效,如果你问我为什么你不使用Handler,我可以在内部使用Handler说CountDownTime。
答案 2 :(得分:0)
我建议使用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);
答案 3 :(得分:0)
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();