当前位置: 首页 > 知识库问答 >
问题:

JavaFX创建透明的径向渐变

田文景
2023-03-14

我想创建一个模拟光的圆,我需要一个径向梯度。我希望它的中心是黄色的,外侧是透明的。

我试过了,但没有达到预期的效果。

RadialGradient gradient1 = new RadialGradient(0, 0, 0.5, 0.5, 1, true, CycleMethod.NO_CYCLE, new Stop[] {
            new Stop(0, Color.YELLOW),
            new Stop(1, Color.TRANSPARENT)
});

共有1个答案

马正初
2023-03-14

我读了径向渐变的留档,并在阅读了停止#偏移后说:

应用程序提供了一系列停止点,指定如何沿渐变分布颜色。Stop#offset变量的范围必须为0.0到1.0,其作用类似于沿渐变的关键帧。它们标记渐变应该恰好是特定颜色的位置。

我想,如果我把停止放在0和1,那么中间的黄色将是50%透明的。这看起来不是这样,至少如果我有一个白色的背景。如果背景是白色的,那么我甚至看不出黄色的圆圈在外边缘是透明的(例如,将背景颜色改为绿色使其更加可见,但这仍然不是我所期望的结果,但也许只是我在想它将更加透明)。

不管怎么说,在玩了一段时间后,我最终得到了以下结论:

我要做的就是把第二站从1改为0.5。我不确定它是否足够好,但从你写的内容来看,它可能是:

我想创建一个模拟光的圆,我需要一个径向梯度。我希望它的中心是黄色的,外侧是透明的。

下面是我创建这三个不同图像的代码(即使CSS解决方案可能不是你想要的,我仍然包含了它)。请注意,我只是为了创建一个快速示例而使用内联样式。

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

@Override
public void start(Stage aStage) throws Exception {
    Label label = new Label("RadialGradient: stops at 0 and 1");
    RadialGradient yours = new RadialGradient(0, 0, 0.5, 0.5, 1, true, CycleMethod.NO_CYCLE, new Stop[] {
            new Stop(0, Color.YELLOW),
            new Stop(1, Color.TRANSPARENT)
    });
    Circle yourCircle = new Circle(100, yours);

    // Changed the stops from 0 and 1 to now go between 0 and 0.5, thats all really. I played around with some more stops but I 
    // didn't really get any results that I was happy with. 
    Label label2 = new Label("RadialGradient: stops at 0 and 0.5");
    RadialGradient gradient = new RadialGradient(0, 0, 0.5, 0.5, 1, true, CycleMethod.NO_CYCLE, new Stop[] {
            new Stop(0, Color.YELLOW),
            new Stop(0.5, Color.TRANSPARENT)
    });
    Circle circle = new Circle(100, gradient);

    // Another way of getting the desired gradient effect can be achieved with CSS. 
    Label label3 = new Label("Alternate way, Region + CSS");
    Region region = new Region();
    region.setStyle(""
            + "-fx-background-color: radial-gradient(center 50% 50%, radius 50%, rgb(251, 255, 0) 0%, rgb(243, 241, 94) 25%,rgba(245, 228, 0, 0) 100%);"
            + "-fx-background-radius:50;");
    region.setPrefWidth(200);
    region.setPrefHeight(200);

    final VBox root = new VBox();
    //  root.setStyle("-fx-background-color:green"); // I just used this so that I could "see" how transparent the circles actually were.
    root.getChildren().addAll(label, yourCircle, label2, circle, label3, region);
    final Scene scene = new Scene(root, 200, 640);
    aStage.setScene(scene);
    aStage.show();
}

也许是一个不必要的冗长回答,说您可能只需要更改一个值。

 类似资料:
  • 我有一个SVG径向渐变可以在Chrome、Firefox甚至Internet Explorer中工作,但在Safari中不工作。你知道怎么在Safari里用这个吗? 下面是代码页:http://codepen.io/fractorr/pen/ovayvv

  • 我试图创建一个带有径向渐变的按钮,但每次我加载应用程序时,它都会崩溃。 mylayout.xml: 我的按钮。xml: 下面是错误日志。我的目标是Android SDK 22。 致命的例外:主java。lang.RuntimeException:无法启动活动组件信息{com.my.app/com.my.app.MyActivity}:android。看法充气异常:二进制XML文件行#324:在an

  • 本文向大家介绍在Java Swing中创建渐变半透明窗口,包括了在Java Swing中创建渐变半透明窗口的使用技巧和注意事项,需要的朋友参考一下 使用JDK 7,我们可以非常容易地使用swing创建基于渐变的半透明窗口。以下是制作基于渐变的半透明窗口所需的步骤。  首先使JFrame的背景透明。  创建渐变颜料,然后填充面板。  将面板分配为框架的内容窗格。 示例 请参阅下面带有基于梯度的半透明

  • 问题内容: 我试图以编程方式重现以下渐变。 如何以编程方式设置参数?谢谢 问题答案: http://developer.android.com/reference/android/graphics/drawable/GradientDrawable.html 要设置该特定参数(我假设您没有指定一个centerX值): 因此,以编程方式创建上述渐变(不同颜色除外): 注意:对于径向渐变,方向将被忽略

  • 问题内容: RGBA是非常有趣的,所以是,和呃… …是啊。:) 有没有一种方法可以将RGBA和渐变这两者结合起来,以便使用当前/最新的CSS规范可以实现alpha透明度的渐变。 问题答案: 是。您可以在webkit和moz渐变声明中使用rgba: (src) (src) 显然,您甚至可以使用奇怪的“扩展十六进制”语法在IE中执行此操作。第一组(在示例55中)指的是不透明度级别: (src)

  • 我是新来的CSS渐变,并试图抓住它,我试图应用一个白色透明的css渐变包围一个圆形div的边界与背景图像。不幸的是,我得到的效果不是我想要的效果,我怎么能让它让图像看起来不那么被梯度遮挡,梯度也不像它那么宽,我想让它只影响图像的边界,比如也许外环大约30像素深。 我的代码: