Я пытался изменить размер сцены с помощью AnimationTimer.Это очень запутанно (возможно, 1-2 кадра в секунду).Поэтому я распечатал прошедшее время между вызовами handle ().Это всего лишь 0,5 мс.Должно быть около 7 мс для экрана 144 Гц и 16 для 60 Гц.У меня экран 144 Гц и экран 60 Гц, подключенный к ПК, и я использую Windows 10.
Возможно, он заикается, потому что setHeight вызывается почти 2 000 раз в секунду.
Вот код:
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 мс, что приводит к более или менее плавной анимации.Это явно не совсем гладко, потому что 7 мс немного смещены и не синхронизированы с экраном.
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?