我有一个带有几个滑块的应用程序,其目的是更改我连接到它的一组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(颜色)的颜色是什么颜色,单击提交后背景显示为黑色。我觉得我错过了一些重要的事情,其他例子没有帮助。我希望这很清楚。
答案 0 :(得分:0)
我明白了。颜色值缺少他们的Alpha值,所以我猜它是透明的或功能没有采取它。通过向每个颜色值添加ff,背景成为焦点。
答案 1 :(得分:0)
首先,您不需要使用backdround.mutate();该对象已经是可变的。函数.setColor()也需要一个argb值。虽然文档说它也接受了一个rgb,但是它将没有alpha的argb值转换为100%透明度,这可能也是不可见的。传递值时需要添加alpha。这就是为什么你需要额外的FF来支持你的rgb。