如何在颜色资源上设置不透明度?

时间:2016-08-10 15:34:51

标签: android colors

我知道我可以通过添加十六进制的alpha通道(#AARRGGBB)来设置不透明度,但是如果我想使用colors.xml中的一个值,我不希望添加不透明度呢?

例如,我在colors.xml中使用了#074EB2的深蓝色,如下所示:

<color name="DarkBlue">#074EB2</color>

现在,我有一个带边框的自定义按钮背景。我希望边框使用这种深蓝色,但添加了不透明度。按钮看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
    <stroke android:width="1dp" android:color="@color/DarkBlue"/>
    <corners android:radius="2dp"/>
</shape>

如何添加不透明度?我是否需要使用不透明度向colors.xml添加新值?即,<color name="DarkBlueTransparent">#80074EB2</color>?我看到的问题是它不可扩展 - 如果我在其他地方需要这种颜色80%不透明度怎么办? 90%?我的colors.xml文件会因为我想要的透明度而以不同的值爆炸。

1 个答案:

答案 0 :(得分:3)

您无法在xml中执行动态不透明度。但是你可以在java方面动态地应用alpha。

使用此方法将alpha应用于您的颜色。

public static int getColorWithAlpha(int yourColor, int alpha) {
    int red = Color.red(yourColor);
    int blue = Color.blue(yourColor);
    int green = Color.green(yourColor);
    return Color.argb(alpha, red, green, blue);
}

现在通过调用方法

获取alpha颜色
blueWithAlpha = getColorWithAlpha(darkBlue, 120);

120是你的alpha级别

  

Alpha级别必须介于0到225之间

现在将颜色应用于按钮

mButton.setBackgroundColor(blueWithAlpha);