我试图用AnimationTimer调整舞台的大小。它非常结实(可能是1-2fps)。因此,我打印了两次handle()调用之间经过的时间。只有0.5ms。 144hz屏幕大约为7ms,60hz屏幕大约为16ms。 我有一个144hz屏幕和一个60hz屏幕连接到PC,并且我正在使用Windows 10。
由于setHeight每秒被调用近2k次,可能是口吃。
以下是一些代码:
AnimationTimer animationTimer = new AnimationTimer() {
long lastTime;
@Override
public void handle(long now) {
animationHeight++;
setHeight(animationHeight);
System.out.println(now - lastTime);
lastTime = now;
if (animationHeight >= totalHeight) {
stop();
}
}
};
animationTimer.start();
控制台输出:
...
584303
578683
514300
481597
...
我试图用java.util.Timer做同样的事情。 我每7毫秒安排一次计时器,从而使动画效果大致平稳。显然,这并不是完全平滑,因为7ms有点偏离并且没有与屏幕同步。
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
animationHeight += 8;
if (animationHeight >= totalHeight) {
setHeight(totalHeight);
cancel();
}
setHeight(animationHeight);
}
};
Timer timer = new Timer();
timer.scheduleAtFixedRate(timerTask, 0, 7);
AnimationTimer怎么了?