我刚刚开始玩Java FX并且非常喜欢它。我没有阅读任何书籍或深入的教程,所以这个问题可能很容易回答。
我想放大 ImageView 并向用户显示图像的特定区域,以防他点击图片的某个区域。更准确地看一下下图:
(如果图片太小,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