倒数计时器从10秒到1秒

时间:2017-06-12 03:10:52

标签: java android timer countdowntimer

我有一个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

更近......但不完全。

4 个答案:

答案 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();