gpt4 book ai didi

Java - 即时改变倒数计时器的速度

转载 作者:行者123 更新时间:2023-11-30 10:18:56 25 4
gpt4 key购买 nike

我正在尝试用 Java 制作一个简单的倒数计时器,它重复执行一组指令。我希望用户能够在代码运行时实时控制该执行的频率(在 Android 上使用 SeekBar)。到目前为止,这是我的尝试:

final CountDownTimer countDownTimer = new CountDownTimer(rsvp.wordsOfSentence.length * rsvp.pace, rsvp.pace) {

@Override
public void onTick(long millisInFuture) {
targetTextView.setText(rsvp.wordsOfSentence[rsvp.getCurrentWord()]);
rsvp.incrementCurrentWord();
}


@Override
public void onFinish() {
targetTextView.setText(rsvp.wordsOfSentence[rsvp.getCurrentWord()]);
}

};


seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
rsvp.setPace(progress);}
});

方法setPace()改变了int pace的值(都是在RSVP类中设置的,rsvp是这个类的一个对象)。所以我试图将步速传递给 CountDown Timer 作为引用,但我不确定我是否正确执行此操作。定时器执行代码,但用户无法控制频率。

提前致谢,如果有什么不清楚的地方请原谅我,我刚开始玩 Java :)

最佳答案

如果您想坚持使用 CountDownTimer,您可以在搜索栏更改时执行此操作:

  • 停止当前倒计时
  • 以新的步调创建新的倒数计时器
  • 开始新的倒计时

或者,您可以使用 Handler 类的 postDelayed延迟后执行某些操作的方法,但这只执行一次操作,因此您需要一次又一次地调用它。我认为这可以更轻松地更改速度,因为您可以在搜索栏更改时使用不同的毫秒数调用 postDelayed

我已经编写了这个使用上述方法的小 Timer 类:

public class Timer {
private Handler handler;
private boolean paused;

private int interval;

private Runnable task = new Runnable () {
@Override
public void run() {
if (!paused) {
runnable.run ();
Timer.this.handler.postDelayed (this, interval);
}
}
};

private Runnable runnable;

public int getInterval() {
return interval;
}

public void setInterval(int interval) {
this.interval = interval;
}

public void startTimer () {
paused = false;
handler.postDelayed (task, interval);
}

public void stopTimer () {
paused = true;
}

public Timer (Runnable runnable, int interval, boolean started) {
handler = new Handler ();
this.runnable = runnable;
this.interval = interval;
if (started)
startTimer ();
}
}

您可以使用 getter 和 setter 轻松获取和设置 interval 字段。

用法:

Timer timer = new Timer(new Runnable() {
@Override
public void run() {
// code to run in each tick of the timer here...
}
}, someInterval, true);
// the timer will start automatically if you pass true as the third argument.

关于Java - 即时改变倒数计时器的速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48993795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com