这是我用来控制间隔的计时器类。欢迎任何人使用它。
我遇到的问题是暂停和恢复。它正确地停顿,但当我尝试使用我的简历()时,它不会恢复时间。有什么想法吗?
public class Timer implements IUpdateHandler {
// ===========================================================
// Constants
// ===========================================================
// ===========================================================
// Fields
// ===========================================================
private final ITimerCallback mCallback;
private float mInterval;
private float mSecondsElapsed;
protected boolean mPause = false;
private float pausedSecond;
// ===========================================================
// Constructors
// ===========================================================
public Timer(final float interval, final ITimerCallback pCallback) {
this.mInterval = interval;
this.mCallback = pCallback;
}
// ===========================================================
// Getter & Setter
// ===========================================================
public void setInterval(final float pInterval) {
this.mInterval = pInterval;
}
// ===========================================================
// Methods for/from SuperClass/Interfaces
// ===========================================================
@Override
public void onUpdate(float pSecondsElapsed) {
this.mSecondsElapsed += pSecondsElapsed;
if (this.mSecondsElapsed >= this.mInterval) {
if (!this.mPause) {
this.mSecondsElapsed -= this.mInterval;
this.mCallback.onTick();
}
}
}
@Override
public void reset() {
this.mSecondsElapsed = 0;
}
// ===========================================================
// Methods
// ===========================================================
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
public interface ITimerCallback {
public void onTick();
}
public void pause() {
this.mPause = true;
this.pausedSecond = this.mSecondsElapsed;
}
public void resume() {
if (this.mPause) {
this.mSecondsElapsed = this.pausedSecond;
this.mPause = false;
} else {
// not paused
}
}
}
答案 0 :(得分:1)
说什么情况
@Override
public void onUpdate(float pSecondsElapsed) {
this.mSecondsElapsed += pSecondsElapsed;
if (this.mSecondsElapsed >= this.mInterval) {
if (!this.mPause) {
this.mSecondsElapsed -= this.mInterval;
}
this.mCallback.onTick();
}
}
应该这样做;如果它没有暂停,只需将onTick移动到外面
答案 1 :(得分:0)
我将在这里走出困境,因为我看不到驱动Timer如何调用onUpdate函数的代码,而且我对你正在使用的IUpdateHandler接口知之甚少。
如果计时器没有暂停,看起来你只是调用mCallback.onTick()。
但是,如果onTick设置了对Timer的onUpdate函数的下一次调用,那么当你暂停它并且它'滴答'时,它将不会调用onTick方法并设置对该函数的下一次调用。