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

シャドウは実際には半透明のノードと半透明のシャドウですが、半透明のシャドウの上に半透明のノードを重ねているため、全体的な結果は依然として半透明ですが、ノードにシャドウが適用されていない場合よりもはるかに不透明になります。2つの50%不透明ノードをレイヤー化するのと似ています。2つのレイヤードノードの交差する領域は75%不透明になります。

サンプルでは、​​不透明度を0.6に設定しているため、ノード+シャドウの不透明度の合計は0.6 + 0.4 * 0.6=0.84になります。さらに、シャドウは、最初に影響を受けるノードよりも暗い色になります。これにより、影響を受けるノードの背後にある線が見えにくくなりますが、ノードとその効果が完全に不透明ではないため、それでも見ることができます。何が起こっているかをより明確に示すために、サンプルの不透明度を0.2に設定し、結合された不透明度を0.36にしました。下のスクリーンショットで結果を確認できます。影響を受けたノードの後ろの線がまだはっきりと見えています。

半透明効果

一般に、影と不透明なノードは視覚的に混ざり合うことはなく、見栄えもよくありません。

于 2013-02-02T21:41:59.220 に答える