如何在JavaFX 8中执行组合/并行缩放和转换动画

时间:2014-09-14 19:22:42

标签: java animation javafx-8

我刚刚开始玩Java FX并且非常喜欢它。我没有阅读任何书籍或深入的教程,所以这个问题可能很容易回答。

我想放大 ImageView 并向用户显示图像的特定区域,以防他点击图片的某个区域。更准确地看一下下图:

enter image description here

(如果图片太小,here is a bigger version

(A)显示我正在使用的完整图片(world-map.jpg,尺寸:4.000px X 3.000px)

(1)显示我正在向用户展示的舞台。我对ImageView对象执行了一些初始缩放和转换,以便视图更加集中于欧洲和非洲。标记的区域是附加的元素,附带事件处理程序(不在我的代码中)

(2)在执行ParallelTransition后显示我得到的结果

(3)显示我想要的结果

执行ParallelTransition时会发生的事情是ImageView会正确放大,但也会转换为Image的右下角。我做错了什么?

这是我的JavaFX应用程序代码:

@Override
  public void start(final Stage stage)
  {

    // our root group
    final Group g = new Group();

    // load image
    ImageView im = new ImageView();
    // using a helper method to load external resource
    Image img = FileUtils.loadImage(R.imageWorldMap);
    im.setImage(img);
    g.getChildren().add(im);

    // translate to center view on europe and africa
    Translate t = new Translate();
    t.setX(-300);
    t.setY(-200);
    im.getTransforms().add(t);

    // zoom out because source image is huge
    Scale scale = new Scale();
    scale.setX(.3);
    scale.setY(.3);
    im.getTransforms().add(scale);

    // create scene and show stage
    final Scene s = new Scene(g, 640, 480);
    stage.setScene(s);
    stage.show();

    // code below is normally inside an event handler 
    // but for simplicity reason and testing its like that now

    // move europe to the center
    TranslateTransition translateTransition =
            new TranslateTransition(Duration.millis(2000), im);

    translateTransition.setToX(1100); // 3300
    translateTransition.setToY(900); // 2700

    // scale in europe
    ScaleTransition scaleTransition =
            new ScaleTransition(Duration.millis(2000), im);
    scaleTransition.setToX(3f);
    scaleTransition.setToY(3f);

    // create parallel translation
    ParallelTransition parallelTransition = new ParallelTransition();
    parallelTransition.getChildren().addAll(
            scaleTransition
            , translateTransition
    );

    parallelTransition.play();

  }

我用坐标玩了一下以获得更好的结果,我做到了,但我想了解如何务实地完成这项任务。

作为一个附带问题,您能否(根据您的经验)推荐一本适用于Java FX 8的书。

我使用的技术:Win7,Java8,JavaFX8

1 个答案:

答案 0 :(得分:0)

我参考javafx下的示例... Demos有一个项目可以做我想要的事情.. MandrelBot ... src在同一个包中..