Vaibhav Jain
Vaibhav Jain

Reputation: 119

Imageview does not resize after ScaleTransition

I am trying to display three images in sequence with some scale transformation to each of them(images of 1,2,3). I am using ScaleTransition on single instance of imageview, after each successive transformation the imageView height get scaled which is not resetting My Code is

    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();
}`

Upvotes: 0

Views: 948

Answers (1)

Sergey Grinev
Sergey Grinev

Reputation: 34498

ImageView doesn't reset it's properties after setting new Image. You need to reset it yourself, e.g. by setting from properties of ScaleTransition:

ScaleTransition st = ScaleTransitionBuilder.create()
    .fromX(1).fromY(1)
    .byX(2).byY(2).node(imageView)
    .duration(Duration.millis(500)).build();

Upvotes: 2

Related Questions