如何将 Alpha 通道添加到 xml 中现有的 Android 颜色

问题描述 投票:0回答:5
android android-resources android-color
5个回答
5
投票

您可以在 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>

3
投票

你必须用代码来完成。你可以得到这样的颜色,

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);

这当然意味着您需要从代码构建您的可绘制对象。不是那么干净,但可能。


0
投票

您必须设置两种不同的颜色作为起始颜色和结束颜色。

请记住,颜色是这样定义的:#AARRGGBB 表示 Alpha、红色、绿色和蓝色。

应用程序启动后,资源处于只读模式。您无法以正确的方式以编程方式更改它们。


0
投票

尝试使用

ColorUtils
包中的
androidx.core.graphics
类,例如;

 int color = getResources().getColor(R.color.border_active_default);
 circle.setFillColor(ColorUtils.setAlphaComponent(color,50));

那么您就不必实现自己的自定义方法。


0
投票

我还想指出,它可以通过编程方式完成 ColorStateList.withAlpha()

像这样:

csl.withAlpha(0) //transparent
csl.withAlpha(255) //opaque
© www.soinside.com 2019 - 2024. All rights reserved.