Android 倒计时表上的时间可以更新吗?
CountDownTimer默认构造函数接受值millisInFuture和countDownInterval。 如果用户停止计时器,将其设置更改为不同的MillsInFuture长度,我如何在不创建新的CountDownTimer对象的情况下更改MillsInFuture值 我尝试在override CountDownTimer类中创建一个getMillisInFuture方法,但没有成功。Android 倒计时表上的时间可以更新吗?,android,Android,CountDownTimer默认构造函数接受值millisInFuture和countDownInterval。 如果用户停止计时器,将其设置更改为不同的MillsInFuture长度,我如何在不创建新的CountDownTimer对象的情况下更改MillsInFuture值 我尝试在override CountDownTimer类中创建一个getMillisInFuture方法,但没有成功。 我必须重写onStart方法吗?还是怎么办?这个类不允许您自己做很多事情 您可以创建一个类,该类包含一
我必须重写onStart方法吗?还是怎么办?这个类不允许您自己做很多事情 您可以创建一个类,该类包含一个
CountDownTimer
字段和一个隐藏实现的方法update(time,tick)
。您仍然需要调用timer.cancel()
并使用新值创建一个新的CountDownTimer
。或者使用处理程序和postDelayed(…)
请看我答案中第二种方法的一个例子,这门课不会让你自己做太多事情
您可以创建一个类,该类包含一个CountDownTimer
字段和一个隐藏实现的方法update(time,tick)
。您仍然需要调用timer.cancel()
并使用新值创建一个新的CountDownTimer
。或者使用处理程序和postDelayed(…)
请看我答案中第二种方法的一个例子,我也需要它,下面是代码
public class DynamicCountdownTimer {
private CountDownTimer timer = null;
private double negativeBias = 0.00;
private double addingBias = 0.00;
private int minutes = 0;
private int ticks = 0;
private boolean supressFinish = false;
public DynamicCountdownTimer(int minutes, int ticks){
setTimer(minutes, ticks);
}
public void updateMinutes(int minutes){
if (timer != null){
this.supressFinish = true;
this.timer.cancel();
this.timer = null;
this.minutes = minutes;
this.addingBias = this.negativeBias + this.addingBias;
setTimer(this.minutes, this.ticks);
Start();
}
}
public void setTimer(int minutes, int ticks){
this.minutes = minutes;
this.ticks = ticks;
timer = new CountDownTimer((minutes * 60 * 1000), ticks) {
@Override
public void onTick(long l) {
negativeBias = (minutes * 60 * 1000) - l;
long calculatedTime = l - (long)addingBias;
if (calculatedTime <= 0){
onFinish();
}else{
callback.onTick(calculatedTime);
}
}
@Override
public void onFinish() {
if (!supressFinish){
callback.onFinish();
}
supressFinish = false;
}
};
}
public void Start(){
if (timer != null){
timer.start();
}
}
public void Cancel(){
if (timer != null){
timer.cancel();
}
}
public DynamicCountdownCallback callback = null;
public void setDynamicCountdownCallback(DynamicCountdownCallback c){
callback = c;
}
public interface DynamicCountdownCallback {
void onTick(long l);
void onFinish();
}
}
然后您可以像这样更新它:
public void updateTimer(int minutes){
pCountDownTimer.updateMinutes(minutes);
}
更新后,计时器将继续运行。它还延续了已经过去的时间。
这意味着,如果时间最初设置为30分钟,10分钟后更新为45分钟,则剩余的倒计时时间将为35分钟
它是通过在调用update函数时重新创建一个新计时器来实现的。在onTick,已经过去的时间(更新之前)被计算到新的进度中
如果需要,只需更换,即可将其更改为ms而不是min
(double)(minutes * 60 * 1000) -> ms
然后
我也需要,这是密码
public class DynamicCountdownTimer {
private CountDownTimer timer = null;
private double negativeBias = 0.00;
private double addingBias = 0.00;
private int minutes = 0;
private int ticks = 0;
private boolean supressFinish = false;
public DynamicCountdownTimer(int minutes, int ticks){
setTimer(minutes, ticks);
}
public void updateMinutes(int minutes){
if (timer != null){
this.supressFinish = true;
this.timer.cancel();
this.timer = null;
this.minutes = minutes;
this.addingBias = this.negativeBias + this.addingBias;
setTimer(this.minutes, this.ticks);
Start();
}
}
public void setTimer(int minutes, int ticks){
this.minutes = minutes;
this.ticks = ticks;
timer = new CountDownTimer((minutes * 60 * 1000), ticks) {
@Override
public void onTick(long l) {
negativeBias = (minutes * 60 * 1000) - l;
long calculatedTime = l - (long)addingBias;
if (calculatedTime <= 0){
onFinish();
}else{
callback.onTick(calculatedTime);
}
}
@Override
public void onFinish() {
if (!supressFinish){
callback.onFinish();
}
supressFinish = false;
}
};
}
public void Start(){
if (timer != null){
timer.start();
}
}
public void Cancel(){
if (timer != null){
timer.cancel();
}
}
public DynamicCountdownCallback callback = null;
public void setDynamicCountdownCallback(DynamicCountdownCallback c){
callback = c;
}
public interface DynamicCountdownCallback {
void onTick(long l);
void onFinish();
}
}
然后您可以像这样更新它:
public void updateTimer(int minutes){
pCountDownTimer.updateMinutes(minutes);
}
更新后,计时器将继续运行。它还延续了已经过去的时间。
这意味着,如果时间最初设置为30分钟,10分钟后更新为45分钟,则剩余的倒计时时间将为35分钟
它是通过在调用update函数时重新创建一个新计时器来实现的。在onTick,已经过去的时间(更新之前)被计算到新的进度中
如果需要,只需更换,即可将其更改为ms而不是min
(double)(minutes * 60 * 1000) -> ms
然后
postDelayed(..)解决方案仅在应用程序获得唤醒锁的情况下有效。否则,如果设备进入睡眠模式,倒计时将停止。但是,在倒计时运行时,获取唤醒锁会大幅增加用电量……postDelayed(..)解决方案只有在应用程序获取唤醒锁的情况下才能工作。否则,如果设备进入睡眠模式,倒计时将停止。但是,在倒计时运行时,获取唤醒锁会大大增加功耗。。。