我正在做一个项目,我想在其中显示带有叠加层的图像。
我的想法是创建一个 AncorPane,在其背景中放置一个 ImageView,然后在其上方放置几个形状。这确实有效。
由于图像非常大,因此需要根据可用空间按比例缩小。不用说想要缩小它们相对于图像保持在同一位置的所有叠加形状。从视觉上看,通过对 AncorPane 应用 Scale Transformation 也可以做到这一点,但我的问题来了。
AncorPane 的大小来自其子项。但即使它们按比例缩小,AncorPane 仍保持未转换图像的大小。这会产生大量空白。我认为这是布局边界与不可调整大小节点的父级边界之间的差异的问题。
有没有人建议设置 AncorPane 的实际大小或另一种摆脱这种不需要的空白的方法。
例子:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.SceneBuilder;
import javafx.scene.control.ScrollPane;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.VBox;
import javafx.scene.shape.Rectangle;
import javafx.scene.transform.Scale;
import javafx.stage.Stage;
public class test extends Application
{
@Override
public void start(final Stage stage) throws Exception
{
final ScrollPane scroll = new ScrollPane();
final Scene scene = SceneBuilder.create().root(scroll).build();
final VBox box = new VBox();
final AnchorPane anchorPane = new AnchorPane();
final ImageView imageView = new ImageView();
final Shape overlayRectangle = new Rectangle(100, 100, 100, 100);
scroll.setContent(box);
box.getChildren().add(anchorPane);
anchorPane.getChildren().addAll(imageView, overlayRectangle);
overlayRectangle.toFront();
imageView.setImage(new Image("http://cdn.sstatic.net/stackoverflow/img/sprites.png"));
final Scale scale = new Scale(0.5, 0.5);
anchorPane.getTransforms().add(scale);
stage.setScene(scene);
stage.show();
}
public static void main(final String[] args)
{
launch();
}
}
运行示例时,您可以看到滚动条仅在您将窗口大小扩大到图像大小的两倍时才会消失。我知道我可以禁用滚动条。这可能在示例代码中有效,但请记住,此示例在很大程度上被缩短了。我什至取消了动态调整大小。