递增毫秒直到完成(倒计时)-Android

递增毫秒直到完成(倒计时)-Android,android,increment,countdowntimer,Android,Increment,Countdowntimer,当我点击“如何增加计时器”时,我尝试了各种方法,但它们都只是启动了一个新的计时器。我想随着时间的推移增加它 剩余时间:5秒 "on_Press_Some_Button();" millisUntilFinished+=2000 剩余时间:7秒如果您需要每隔x毫秒发生一次事件,您可以使用TimerTask: time = 0; //Declare the timer t = new Timer(); //Set the schedule function and

当我点击“如何增加计时器”时,我尝试了各种方法,但它们都只是启动了一个新的计时器。我想随着时间的推移增加它

剩余时间:5秒

"on_Press_Some_Button();"
millisUntilFinished+=2000

剩余时间:7秒

如果您需要每隔x毫秒发生一次事件,您可以使用TimerTask:

    time = 0;
    //Declare the timer
    t = new Timer();
    //Set the schedule function and rate
    t.scheduleAtFixedRate(new TimerTask() 
    {

        @Override
        public void run() 
        {
            runOnUiThread(new Runnable() 
            {

                @Override
                public void run() 
                {
                           //do what u need to
                    }

            });
        }

    },
    //Set how long before to start calling the TimerTask (in milliseconds)
    0,
    //Set the amount of time between each execution (in milliseconds)
    1000);

我将在包装倒计时器本身的基础上采用另一种方法

public abstract class MyCountDownTimer {

    private CountDownTimer cdt;
    private long millisInFuture;
    private long countDownInterval;

    public MyCountDownTimer(long millisInFuture, long countDownInterval) {
        this.millisInFuture = millisInFuture;
        this.countDownInterval = countDownInterval;

        recreateCounter(millisInFuture, countDownInterval);
    }

    public abstract void onFinish();

    public abstract void onTick(long millisUntilFinished);

    public void start(){
        cdt.start();
    }

    private void setMillisInFuture(long millisInFuture){
        this.millisInFuture = millisInFuture;
    }

    public void onIncrement(long millis){
        millisInFuture += millis;
        recreateCounter(millisInFuture, countDownInterval);
    }

    private void recreateCounter(long millisInFuture, long countDownInterval){
        if(cdt != null){
            try {
                cdt.cancel();
            } catch (Exception e) {
            }
        }

        cdt = new CountDownTimer(millisInFuture, countDownInterval) {

            @Override
            public void onTick(long millisUntilFinished) {
                setMillisInFuture(millisUntilFinished);
                MyCountDownTimer.this.onTick(millisUntilFinished);
            }

            @Override
            public void onFinish() {
                MyCountDownTimer.this.onFinish();
            }
        };
    }
}

希望它适合你的需要

你能解释清楚一点吗?
CountDownTimer
没有
onIncrement()
。这是“倒计时”而不是“倒计时”。如果需要,您当然可以在
onTick()
中增加一些变量。否则,您可能想使用其他东西,具体取决于您想要什么。可能是一个
while循环
,它增加一个变量,并在需要时停止…
“按一些按钮”
我想要
毫秒直到完成+=3000
如果我没有错,上面有一些不完整的代码,但在完成后它会正常工作。以下是onIncrement(long millis)中的更改:public void onIncrement(long millis){millisInFuture+=millis;recreateCounter(millisInFuture,countDownInterval);cdt.start()}另外,cancel()的包装方法将有帮助:public void cancel(){cdt.cancel();}
CountDownTimer count = new CountDownTimer(1000000, 1000) {
            public void onTick(long millisUntilFinished) {

                // this will decrement 100 to 1
                int seconds = (int) (millisUntilFinished / 1000) % 100;

                int minutes = (int) ((millisUntilFinished / (1000 * 60)) % 60);
                int hours = (int) (((millisUntilFinished / (1000 * 60)) % 60))%60;

                // this will increment 1 to 100
                int incrementSeconds = 100 - seconds;

            }

            public void onFinish() {
            }
        };

        count.start();