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_BOTHcycleCount 设置为1 看起来会更好,这是默认的cycleCount。但我同意,LINEAR 感觉像是更自然的默认设置。【参考方案2】:

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

您想要线性插值,因此将其添加到您的代码中:

rotateTransition.setInterpolator(Interpolator.LINEAR);

【讨论】:

非常感谢罗恩!

以上是关于JavaFX:循环之间的旋转动画延迟的主要内容,如果未能解决你的问题,请参考以下文章

旋转动画

Google Chrome 中的 CSS 转换延迟

CALayer 旋转动画不适用于呈现的 ViewController

如何为我的电子商务商店模仿这种旋转文本动画?

css3圆环旋转效果动画怎么做

如何用css3实现360度旋转动画