0

我正在尝试按顺序显示三个图像,并对每个图像进行一些比例转换(1、2、3 的图像)。我在 imageview 的单个实例上使用 ScaleTransition,在每次连续转换后,imageView 高度都会被缩放,这不会重置我的代码是

    public void start(Stage primaryStage) {

    final IntegerProperty intProperty = new SimpleIntegerProperty(0);
    final Image[] array = {
            (new Image(WaitEffect.class.getResource("1.png")
                    .toExternalForm())),
            (new Image(WaitEffect.class.getResource("2.png")
                    .toExternalForm())),
            (new Image(WaitEffect.class.getResource("3.png")
                    .toExternalForm())) };
    Group root = new Group();

    Scene scene = new Scene(root, 400, 400, Color.BLACK);
    StackPane pane = StackPaneBuilder.create()
            .layoutX(scene.getWidth() / 2).layoutY(scene.getHeight() / 2)
            .build();
    final ImageView imageView = new ImageView();
    pane.getChildren().add(imageView);
    Timeline timeline = new Timeline();
    int count = 0;
    KeyValue value = new KeyValue(intProperty, count++);
    KeyFrame frame = new KeyFrame(Duration.millis(2000),
            new EventHandler<ActionEvent>() {
                int co = 0;

                @Override
                public void handle(ActionEvent paramT) {
                    imageView.setImage(array[co]);

                    ScaleTransition st = ScaleTransitionBuilder.create()
                            .byX(2).byY(2).node(imageView)
                            .duration(Duration.millis(500)).build();
                    st.play();
                    imageView.setFitHeight(150);
                    imageView.setFitWidth(150);
                    imageView.resize(150, 150);
                    co++;
                }
            }, value);

    timeline.getKeyFrames().add(frame);
    timeline.setCycleCount(3);
    timeline.play();

    root.getChildren().addAll(pane);
    primaryStage.setScene(scene);

    primaryStage.show();
}`
4

1 回答 1

2

ImageView设置 new 后不会重置它的属性Image。您需要自己重置它,例如通过设置以下from属性ScaleTransition

ScaleTransition st = ScaleTransitionBuilder.create()
    .fromX(1).fromY(1)
    .byX(2).byY(2).node(imageView)
    .duration(Duration.millis(500)).build();
于 2012-08-22T08:43:55.043 回答