java - Java FX TranslateTransition 持续时间更改
问题描述
所以我希望能够通过改变持续时间来改变动画的速度。我知道 Java Docs 说它不能完成,但我认为停止动画、更改 Duration 并从它停止的点开始没有任何问题。有了这个实现,我的圈子就停止了,不想再移动了。我能以某种方式做到吗?如果我不能,我如何制作具有可变速度的动画?
编辑:它确实有效,但是当我更改持续时间时,起点会发生变化,而终点不会因此变得越来越接近终点,直到它停止(除非我只在圆圈是接近初始起点)。对只会影响动画速度的算法有什么想法吗?
public void initialize() {
TranslateTransition transition = new TranslateTransition();
transition.setDuration(Duration.seconds(2));
transition.setToX(162);
transition.setToY(72);
transition.setAutoReverse(true);
transition.setCycleCount(TranslateTransition.INDEFINITE);
transition.setNode(myCircle);
transition.play();
mySlider.valueProperty().addListener(new ChangeListener() {
@Override
public void changed(ObservableValue arg0, Object arg1, Object arg2) {
transition.stop();
Duration d = transition.getDuration();
transition.setDuration(Duration.seconds(mySlider.getValue()));
transition.playFrom(d);
System.out.println(mySlider.getValue());
}
});
}
解决方案
编辑:它确实有效,但是当我更改持续时间时,起点会发生变化,而终点不会因此变得越来越接近终点,直到它停止(除非我只在圆时改变速度接近初始起点)。
由于您没有指定 和 的起始值translateX
,translateY
因此TranslateTransition
在从停止状态转换到另一个状态时获取这些属性的当前值。由于您确实停止了过渡,因此每次更改滑块都会发生这种情况。那时翻译属性的值可能与起始位置不同。
此外,如果您减小持续时间滑块的值,则传递给该playFrom
方法的时间可能是在循环结束之后。
我建议改为修改rate
属性:
TranslateTransition transition = new TranslateTransition();
transition.setDuration(Duration.seconds(1));
...
transition.rateProperty().bind(Bindings.divide(1d, mySlider.valueProperty()));
推荐阅读
- reactjs - 异步方式上的 useReducer + Typescript
- python - discord.py guild.members 只返回 4 个成员而不是所有成员
- java - Springdoc中基于Swagger注解的自动描述生成
- javascript - React - 使用 Hooks 时出现错误 - 对象不可迭代(无法读取属性 Symbol (Symbol.iterator))
- python - 如何在 Python SQLite 中安全地使用 IN 命令?
- r - 在列表的 lapply 函数中获取数据框名称(ggplot2)
- ios - 有没有办法让拖尾的滑动操作像 macOS 11.0 一样具有圆角?
- kotlin - Kotlin 中“For 循环”中 Thread.Sleep() 的替代方案?
- javascript - 每次访问与模式匹配的 url 时,在 chrome 扩展的后台脚本中添加一个监听器到 webNavigation
- graphql - 使用 Apollo GraphQl 的待办事项列表乐观订阅更新