JavaFX:旋转动画循环之间的延迟

7

我根据RotatedTransition创建了一个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();

这导致以下动画效果: 旋转动画 正如您在动画gif中所注意到的那样,动画不是连续的,即动画周期之间存在小的延迟(暂停)。
我尝试查看API,但无法确定是什么原因导致了这种延迟,以及如何消除它。
2个回答

5

每个周期之间的明显暂停是由插值器引起的,默认情况下使用Interpolator.EASE_BOTH(因此在每个周期结束时减速,在开始时加速)。

要去除这个暂停,只需将插值器设置为Interpolator.LINEAR

rotateTransition.setInterpolator(Interpolator.LINEAR);

2
非常感谢!实际上,我尝试过将插值器更改为其他值,但从未尝试过使用 Interpolator.LINEAR,因为我错误地认为它是默认值。 - Pablo Navais
@PabloNavais 哎呀,我也是这么觉得。为什么线性不是默认值呢! - xip
我猜EASE_BOTHcycleCount设置为默认值1时看起来更好。但是我同意,LINEAR感觉更自然地成为默认值。 - James_D

2

每个Transition周期的加速和减速时间由Interpolator控制。Transition使用的默认InterpolatorInterpolator.EASE_BOTH

如果你想要线性插值,请将以下代码添加到你的程序中:

rotateTransition.setInterpolator(Interpolator.LINEAR);

非常感谢你,Ron! - Pablo Navais

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接