Android:GradientDrawable只绘制黑色

时间:2017-11-23 22:09:01

标签: android android-layout

我有一个带有几个滑块的应用程序,其目的是更改我连接到它的一组LED灯的颜色。我正在实现一个具有功能的UI,该功能将改变径向渐变的颜色以给出LED颜色的近似值。

我可以像这样定义默认背景:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >

<gradient
    android:id="@+id/radGrad"
    android:centerColor="#ecd473"
    android:centerY="0%"
    android:centerX="0%"
    android:endColor="#000000"
    android:gradientRadius="600"
    android:innerRadiusRatio="2"
    android:startColor="#f9f7a8"
    android:type="radial" >
</gradient>
</shape>

并在我的活动布局中:

这将显示为背景,如下所示:enter image description here

我试图用图片中滑块选择的值覆盖背景。我想基本上创建相同的背景图像,左上角有一个径向渐变,有各种颜色,但是我被卡住了。

这是我在OnCreate()

之后的java代码
View backgroundView;
GradientDrawable background;
background = this.getWindow().getDecorView();

以及我选择提交按钮时的其余代码:

submitButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            color = new int[3];
            color[0]=0xecd473; //these values will eventually be changed by the slider
            color[1]=0xf9f7a8;
            color[2]=0xffffff;
            background = new GradientDrawable(GradientDrawable.Orientation.BL_TR, color);
            background.mutate();
            background.setGradientType(GradientDrawable.RADIAL_GRADIENT);
            background.setGradientRadius(600);
            background.setGradientCenter(0,0);
            background.setShape(GradientDrawable.RECTANGLE);
            background.setCornerRadius(50f);
            background.setColors(color);
            backgroundView.setBackground(background);
            progressTextView.setText("Hue: " + hueValue + " Brightness: " + brightValue + " Saturation: " + satValue);
        }
    });

}    

无论我提供background.setColors(颜色)的颜色是什么颜色,单击提交后背景显示为黑色。我觉得我错过了一些重要的事情,其他例子没有帮助。我希望这很清楚。

2 个答案:

答案 0 :(得分:0)

我明白了。颜色值缺少他们的Alpha值,所以我猜它是透明的或功能没有采取它。通过向每个颜色值添加ff,背景成为焦点。

答案 1 :(得分:0)

首先,您不需要使用backdround.mutate();该对象已经是可变的。函数.setColor()也需要一个argb值。虽然文档说它也接受了一个rgb,但是它将没有alpha的argb值转换为100%透明度,这可能也是不可见的。传递值时需要添加alpha。这就是为什么你需要额外的FF来支持你的rgb。