在 JavaFX 中到达 PathTransition 的一半时触发事件
Trigger event when reaches half of an PathTransition in JavaFX
我有一个 PathTransition 来移动由 2 个路径组成的 ImageView。
我想在动画播放到一半时添加一个动作。
我看到通过 getCuePoints 方法,我们可以在特定时间添加标记,但我不知道如何 link 这个标记在一个动作中:/
你有什么想法吗?
谢谢! :)
使用一个ParallelTransition
到运行一个PauseTransition
,持续时间是PathTransition
的一半。这允许您使用 onFinished
处理程序来触发事件:
public void start(Stage primaryStage) {
Path path = new Path(new MoveTo(), new CubicCurveTo(100, 100, 150, 50, 200, 100));
Rectangle rect = new Rectangle(10, 10);
Rectangle back = new Rectangle(100, 50, Color.RED);
back.setVisible(false);
// original transition
PathTransition transition = new PathTransition(Duration.seconds(5), path, rect);
// transition for triggering halftime event
PauseTransition pause = new PauseTransition(transition.getCycleDuration().multiply(0.5));
pause.setOnFinished(evt -> back.setVisible(true));
// combine & play transitions
ParallelTransition animation = new ParallelTransition(rect, transition, pause);
animation.play();
Scene scene = new Scene(new Pane(back, rect), 300, 300);
primaryStage.setScene(scene);
primaryStage.show();
}
我有一个 PathTransition 来移动由 2 个路径组成的 ImageView。
我想在动画播放到一半时添加一个动作。
我看到通过 getCuePoints 方法,我们可以在特定时间添加标记,但我不知道如何 link 这个标记在一个动作中:/
你有什么想法吗?
谢谢! :)
使用一个ParallelTransition
到运行一个PauseTransition
,持续时间是PathTransition
的一半。这允许您使用 onFinished
处理程序来触发事件:
public void start(Stage primaryStage) {
Path path = new Path(new MoveTo(), new CubicCurveTo(100, 100, 150, 50, 200, 100));
Rectangle rect = new Rectangle(10, 10);
Rectangle back = new Rectangle(100, 50, Color.RED);
back.setVisible(false);
// original transition
PathTransition transition = new PathTransition(Duration.seconds(5), path, rect);
// transition for triggering halftime event
PauseTransition pause = new PauseTransition(transition.getCycleDuration().multiply(0.5));
pause.setOnFinished(evt -> back.setVisible(true));
// combine & play transitions
ParallelTransition animation = new ParallelTransition(rect, transition, pause);
animation.play();
Scene scene = new Scene(new Pane(back, rect), 300, 300);
primaryStage.setScene(scene);
primaryStage.show();
}