如何在运行时增加倒计时?倒计时、如何在

2023-09-06 07:02:32 作者:怀中猫

我想提出一个课程项目,并为这个项目,我需要显示一个倒数计时器。会有哪些由5+秒为单位计时按钮。例如,如果定时器设置,并开始在1:00和当用户点击该按钮,计时器必须增加+5像1:05。

I am making a course project and for this project, I will need to show a countdown timer. There will be a button which increments the timer by 5+ second. For example if the timer is set and started at 1:00 and if a user clicks the button, the timer must increase +5 like 1:05.

我的code:

public class MainActivity extends Activity {

Button incrementTime, startTime;
public TextView timedisplay;
long millisInFuture = 1000;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    incrementTime = (Button) findViewById(R.id.button2);
    startTime = (Button) findViewById(R.id.button3);
    timedisplay = (TextView) findViewById(R.id.mycounter);

    resetText();

    incrementTime.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            millisInFuture += 1000;
            resetText();
        }
    });

    startTime.setOnClickListener(new OnClickListener(){
        public void onClick(View v) {
            CountDownTimer wavetimer = new myTimer(millisInFuture + 3000, 1000).start();
            // ^ add 3 seconds.
        }
    });}

protected void resetText() {
    timedisplay.setText("Time Left: " + millisInFuture / 1000);
}

public class myTimer extends CountDownTimer  {

    private long millisActual;

    public myTimer(long millisInFuture, long countDownInterval) {
        super(millisInFuture, countDownInterval);
        millisActual = millisInFuture - 3000;
    }

    @Override
    public void onTick(long millisUntilFinished) {
        //v start showing the tick after 3 seconds.
        if (millisUntilFinished <= millisActual) {
            timedisplay.setText("Time Left: " + millisUntilFinished / 1000);                
        }
    }

    @Override
    public void onFinish() {
        timedisplay.setText("Countdown Finished");
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
    }
}

我的问题:

这以同样的方式,但我想在计时器完成运行只递增。我希望它倒计时运行期间递增!

This works the same way I want but it only increments after the timer has finished running. I want it to increment during the countdown runtime!

推荐答案

您可以使用这个类为您的需要:

    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();
            }
        };
    }
}