
您无法在两个场景之间应用过渡,因为不可能同时在一个舞台上同时使用这两个场景。一种解决方案是仅拥有一个场景并管理内部的所有过渡,如@James_D答案所示。
但是您也可以模拟两个场景之间的过渡。为此,您可以使用两个快照,在它们之间进行过渡,最后只设置新场景。
这是一个非常基本的工作案例,您可以在新场景中单击以再次前进和后退:
@Overridepublic void start(Stage primaryStage) { Group root1 = new Group(); Group root2 = new Group(); Scene scene1 = new Scene(root1, 300, 250); Scene scene2 = new Scene(root2, 300, 250); Rectangle rectangle2 = new Rectangle(300, 250); rectangle2.setFill(Color.BLUE); root2.getChildren().add(rectangle2); Rectangle rectangle1 = new Rectangle(300, 250); rectangle1.setFill(Color.RED); root1.getChildren().add(rectangle1); primaryStage.setTitle("Hello World!"); primaryStage.setScene(scene1); primaryStage.show(); rectangle1.setonMouseClicked(e->{ // Create snapshots with the last state of the scenes WritableImage wi = new WritableImage(300, 250); Image img1 = root1.snapshot(new SnapshotParameters(),wi); ImageView imgView1= new ImageView(img1); wi = new WritableImage(300, 250); Image img2 = root2.snapshot(new SnapshotParameters(),wi); ImageView imgView2= new ImageView(img2); // Create new pane with both images imgView1.setTranslateX(0); imgView2.setTranslateX(300); StackPane pane= new StackPane(imgView1,imgView2); pane.setPrefSize(300,250); // Replace root1 with new pane root1.getChildren().setAll(pane); // create transtition Timeline timeline = new Timeline(); KeyValue kv = new KeyValue(imgView2.translateXProperty(), 0, Interpolator.EASE_BOTH); Keyframe kf = new Keyframe(Duration.seconds(1), kv); timeline.getKeyframes().add(kf); timeline.setonFinished(t->{ // remove pane and restore scene 1 root1.getChildren().setAll(rectangle1); // set scene 2 primaryStage.setScene(scene2); }); timeline.play(); }); rectangle2.setonMouseClicked(e->{ // Create snapshots with the last state of the scenes WritableImage wi = new WritableImage(300, 250); Image img1 = root1.snapshot(new SnapshotParameters(),wi); ImageView imgView1= new ImageView(img1); wi = new WritableImage(300, 250); Image img2 = root2.snapshot(new SnapshotParameters(),wi); ImageView imgView2= new ImageView(img2); // Create new pane with both images imgView2.setTranslateX(0); imgView1.setTranslateX(300); StackPane pane= new StackPane(imgView2,imgView1); pane.setPrefSize(300,250); // Replace root2 with new pane root2.getChildren().setAll(pane); // create transtition Timeline timeline = new Timeline(); KeyValue kv = new KeyValue(imgView1.translateXProperty(), 0, Interpolator.EASE_BOTH); Keyframe kf = new Keyframe(Duration.seconds(1), kv); timeline.getKeyframes().add(kf); timeline.setonFinished(t->{ // remove pane and restore scene 2 root2.getChildren().setAll(rectangle2); // set scene 1 primaryStage.setScene(scene1); }); timeline.play(); });}对于更复杂的特效来看看这个。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)