JavaFX Switch场景具有幻灯片效果

JavaFX Switch场景具有幻灯片效果,第1张

JavaFX Switch场景具有幻灯片效果

您无法在两个场景之间应用过渡,因为不可能同时在一个舞台上同时使用这两个场景。一种解决方案是仅拥有一个场景并管理内部的所有过渡,如@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();    });}

对于更复杂的特效来看看这个。



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5643380.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-16
下一篇2022-12-16

发表评论

登录后才能评论

评论列表(0条)

    保存