我在values/colors.xml
中有以下颜色:
<color name="grey_1">#0F0E10</color>
我想在渐变中引用这种颜色:
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:type="linear"
android:angle="-90"
android:startColor="#000F0E10"
android:endColor="#990F0E10"/>
</shape>
但是,这会复制RGB颜色定义。理想情况下,我想写这样的东西:
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:type="linear"
android:angle="-90"
android:startColor="alpha(00, @color/grey_1)"
android:endColor="alpha(99, @color/grey_1)"/>
</shape>
或者这个:
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:type="linear"
android:angle="-90"
android:startColor="@color/grey_1"
android:startTransparency="#00"
android:endColor="@color/grey_1"
android:endTransparency="#99"/>
</shape>
这可能吗?
答案 0 :(得分:1)
您必须使用代码来完成。你可以得到这样的颜色
int color = getResources().getColor(R.color.<the color>);
您可以像这样将其转换为ARGB:
int a = Color.alpha(color);
int r = Color.red(color);
int g = Color.green(color);
int b = Color.blue(color);
现在,您可以使用所需的任何Alpha重新创建颜色:
color = Color.argb(<new alpha>, r, g, b);
这当然意味着您需要从代码构造可绘制对象。不太干净,但是可能。
答案 1 :(得分:0)
您必须设置两种不同的颜色作为开始和结束颜色。
请记住,颜色是通过以下方式定义的:#AARRGGBB用于Alpha,红色,绿色和蓝色。
启动应用后,资源将处于只读模式。您无法通过编程方式正确地更改它们。
答案 2 :(得分:0)
您可以在API 23及更高版本中使用ColorStateList
进行此操作。
从文档中
从API 23开始,项目可以选择定义android:alpha 属性以修改基础颜色的不透明度。此属性需要一个 介于0和1之间的浮点值或主题属性 这样解决。该项目的整体颜色由下式计算 将基色的Alpha通道乘以Alpha值。对于 例如,以下项目代表主题的强调色为50% 不透明度:
<item android:state_enabled="false"
android:color="?android:attr/colorAccent"
android:alpha="0.5" />
因此,就我而言,我会这样做:
color/gradient_start_color.xml
:
<item android:color="@color/grey_1"
android:alpha="0" />
color/gradient_end_color.xml
:
<item android:color="@color/grey_1"
android:alpha="0.6" />
drawable/gradient.xml
:
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:type="linear"
android:angle="-90"
android:startColor="@color/gradient_start_color"
android:endColor="@color/gradient_end_color" />
</shape>