gpt4 book ai didi

java - 如何从 Android 倒计时器中减去一秒(或更多)?

转载 作者:行者123 更新时间:2023-12-01 06:19:02 26 4
gpt4 key购买 nike

我是倒数计时器的新手,所以我不知道这个问题。我尝试了很多事情,但没有得到我所期望的。这是我的计时器代码。像往常一样,它是类中的类。

// TIMER
public class Timer extends CountDownTimer {

public Timer(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}

@Override
public void onFinish() {

//getNgo(true, score, tries, secLeft);
}

@Override
public void onTick(long millisUntilFinished) {

//secLeft = millisUntilFinished;

int sec = (int) (millisUntilFinished / 1000);
sec = sec % 60;
int min = sec / 60;
tvTime.setTextColor(Color.WHITE);

if (sec <= 10) {

animScale(tvTime);

tvTime.setTextColor(Color.RED);
tvTime.setText("" + min + ":" + sec);

if (sec < 10) {
tvTime.setTextColor(Color.RED);
tvTime.setText("" + min + ":0" + sec);
}

} else {
tvTime.setText("" + min + ":" + sec);
}
}

}

所以,我只是想知道当我按下按钮时如何扣除 3 秒(即 3000 毫秒),并且 TextView 显示的计时器将继续滴答作响,但时间已经被扣除。以及我把代码放在哪里。谢谢!

最佳答案

当我必须对安排在固定时间进行的任务执行此操作时,我会:

  1. 取消了原来的任务。
  2. 已提交一份包含新时间段的新报告。

我怀疑这是比您使用 Timer 更标准的模式。

例如:

private final Runnable task = new Runnable() { @Override public void run() { /* ... */ } };

private final ScheduledThreadPoolExecutor stpe = new ScheduledThreadPoolExecutor();

private final long initialSeconds = 3;

public void submitTask() {
stpe.schedule(task, initialSeconds, TimeUnit.Seconds());
}

public void subtractSeconds(long sec) {
if(stpe.remove(task)) {
stpe.schedule(task, Math.Max(initialSeconds - sec, 0), TimeUnit.Seconds);
}
}

你需要弄清楚:

  • 如何确保任务仅初始提交一次并跟踪固定变量
  • 您是否需要一项固定的最终任务或需要更改的任务
  • 如果任务可以多次提交,就会出现并发/多线程问题

关于java - 如何从 Android 倒计时器中减去一秒(或更多)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15053574/

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