JavaFX:循环之间的旋转动画延迟
Posted
技术标签:
【中文标题】JavaFX:循环之间的旋转动画延迟【英文标题】:JavaFX : Rotated animation delay between cycles 【发布时间】:2016-07-05 05:50:42 【问题描述】:我使用以下代码为基于 RotatedTranstion 的 ImageView 创建了动画:
ImageView icon = ImageCache.getImage("refresh.png");
RotateTransition rotateTransition = new RotateTransition(Duration.millis(2000), icon);
rotateTransition.setByAngle(360.0);
rotateTransition.setCycleCount(Timeline.INDEFINITE);
rotateTransition.play();
这会产生以下动画:
Rotation in Action
您可能已经在动画 gif 中注意到,动画不是连续的,即动画周期之间有一个小的延迟(暂停)。
我尝试查看 API,但无法弄清楚导致此延迟的原因以及如何摆脱它。
【问题讨论】:
【参考方案1】:每个循环之间的明显暂停是由interpolator 引起的,默认情况下使用Interpolator.EASE_BOTH
(因此它在每个循环结束时减速并在开始时加速)。
要删除它,只需将插值器设置为Interpolator.LINEAR
:
rotateTransition.setInterpolator(Interpolator.LINEAR);
【讨论】:
非常感谢!事实上,我尝试将插值器更改为其他值,但从未尝试过使用 Interpolator.LINEAR,因为我错误地认为它是默认值。 @PabloNavais 呃,一样。为什么一开始就不是线性的! 我猜EASE_BOTH
将cycleCount
设置为1
看起来会更好,这是默认的cycleCount
。但我同意,LINEAR
感觉像是更自然的默认设置。【参考方案2】:
每个Transition
循环的加速和减速时间由Interpolator
控制。 Transition 使用的默认Interpolator
是Interpolator.EASE_BOTH
。
您想要线性插值,因此将其添加到您的代码中:
rotateTransition.setInterpolator(Interpolator.LINEAR);
【讨论】:
非常感谢罗恩!以上是关于JavaFX:循环之间的旋转动画延迟的主要内容,如果未能解决你的问题,请参考以下文章