计时器的设置时间为800毫秒,因此,总是RandomPositions()将每800毫秒(该时间段)执行一次内部代码。现在,我想要的是每20秒或20,000毫秒将此数字减少50,直到周期达到200毫秒。
目标-在游戏中,必须每20秒逐步增加速度。
例:
第一次执行-800毫秒,
第二次执行-750毫秒,
第三次执行-700毫秒,
等等...
我的想法是,我可以插入一个Integer类型的函数(而不是800),这可以使这项工作从800毫秒减少到200毫秒。
我该如何做这个功能?还是有其他解决方案?
public void RandomPositions() {
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask()
{
public void run() {
getWindowManager().getDefaultDisplay().getMetrics(displaymatrics);
float dx = r.nextFloat() * displaymatrics.widthPixels/1.2f;
float dy = r.nextFloat() * displaymatrics.heightPixels/1.2f;
button.animate().x(dx).y(dy).setDuration(0);
}
}, 0, 800); // first value = Delay , Second value = Period(what I need to change)
最佳答案
我不会为此使用计时器,因为间隔一直在变化。
在香草Android系统中,我可能会使用Handler
Int interval = 800; // milliseconds
Handler handler = new Handler()
Runnable runnable = new Runnable() {
@Override void run() {
//
// do your logic here
//
// decrement interval by 20 milliseconds
// if interval - 20 is greater than 200
interval = interval - 20 > 200 ? interval - 20 : interval;
// Request an execution of this runnable with the new value of interval
handler.postDelayed(runnable, interval);
}
}
public void start() {
handler.postDelayed(runnable, interval);
}
public void stop() {
handler.removeCallbacks(runnable);
}
确保无论何时要停止
removeCallbacks
或在用户离开运行它的活动/上下文时都调用它。