在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>
型
这可能吗?
5条答案
按热度按时间crcmnpdw1#
您可以在API 23和更高版本中使用
ColorStateList
执行此操作。从docs:
从API 23开始,项目可以选择性地定义一个android:alpha属性来修改基色的不透明度。该属性接受一个0到1之间的浮点值,或者接受一个按此方式解析的主题属性。项目的整体颜色是通过将基色的alpha通道乘以alpha值来计算的。例如,以下项目表示主题的强调色为50%不透明度:
字符串
因此,在我的情况下,我会这样做:
color/gradient_start_color.xml
:型
color/gradient_end_color.xml
:型
drawable/gradient.xml
:型
jvlzgdj92#
你必须用代码来做。你可以得到这样的颜色,
字符串
你可以像这样把它转换成ARGB:
型
现在你可以用你想要的alpha重新创建颜色:
型
这意味着你当然需要从代码中构造drawable,虽然不那么干净,但也是可能的。
iyr7buue3#
必须将两种不同的颜色设置为开始颜色和结束颜色。
请记住,颜色是这样定义的:#AARRGGBB代表Alpha,Red,绿色和蓝色。
一旦应用程序启动,资源将处于只读模式。您无法以适当的方式通过编程方式更改它们。
fhg3lkii4#
例如,尝试使用
androidx.core.graphics
包中的ColorUtils
类;字符串
那么您就不必实现自己的自定义方法。
vwhgwdsa5#
我还想指出的是,它可以通过ColorStateList.withAlpha()以编程方式完成
就像这样:
字符串