1

有没有其他人发现在样式中添加 -fx-effect 会阻止不透明度工作?

这是一个简单的例子

public class TestGUI extends Application {

@Override
public void start(final Stage primaryStage) {

    Line line = LineBuilder.create()
            .startX(150)
            .startY(0)
            .endX(150)
            .endY(250)
            .build();

    Button btn = ButtonBuilder.create()
            .text("Open countdown!")
            // this breaks the opacity!
            .style("-fx-effect: dropshadow(three-pass-box, grey, 5, 0.5, 2, 5);")
            .opacity(0.6)
            .build();

    btn.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {
            System.out.println("Button clicked");
        }
    });

    StackPane root = new StackPane();
    root.getChildren().addAll(line, btn);

    Scene scene = new Scene(root, 300, 250);

    primaryStage.setTitle("Test Application");
    primaryStage.setScene(scene);
    primaryStage.show();
}

public static void main(String[] args) {
    launch(args);
}

}

取出style子句,通过按钮可以看到行。

这是一个错误还是我错过了什么。

4

1 回答 1

1

阴影实际上是半透明节点和半透明本身的阴影,但是因为您在半透明阴影之上叠加了一个半透明节点,所以整体结果仍然是半透明的,但比没有应用阴影的节点更不透明。类似于将两个 50% 不透明节点分层。两个分层节点的相交区域将为 75% 不透明。

在您的示例中,您将不透明度设置为 0.6,因此节点 + 阴影的组合不透明度为 0.6 + 0.4 * 0.6 = 0.84。加上阴影的颜色比受影响的节点开始时要暗。这使得很难看到受影响节点后面的线 - 但您仍然可以看到它,因为节点 + 它的效果不是完全不透明的。为了更清楚地显示发生了什么,我将样本的不透明度设置为 0.2,使组合不透明度为 0.36。您可以在下面的屏幕截图中看到结果,受影响节点后面的线仍然清晰可见。

半透明效果

通常,阴影和不透明节点在视觉上不会混合在一起,看起来都很好

于 2013-02-02T21:41:59.220 回答