在android中以编程方式获取ARGB背景颜色中A的值



假设我在android中的背景颜色设置为#AF000000(AARRGGBB)。我想要阿尔法通道(AA)的十进制值(0-255),它将是175。

如何通过程序实现?

这里是一个纯Java解决方案,它不使用Android特定的getAlpha()方法。

这个值存储在String还是int中?如果它在String中,首先去掉#字符,然后将其转换为int:

String hexString = "#05000000";
int color = Integer.parseInt(hexString.replaceAll("#", ""), 16);

然后我们需要做一些小操作。这种十六进制颜色表示意味着(在ARGB模式下)您具有#AARGGBB值。这是每个通道的2个字节,包括alpha通道。为了只得到alpha通道(十六进制值的AA部分),我们需要"向右推6字节"(Java是一种大终结语言),这样我们就可以得到类似#000000AA的东西。由于每个字节由8位组成,我们必须"向右"推送"阿尔法值6 * 8 = 24

int alpha = color >> 24;

这个过程被称为比特移位。所有最右边的RGB值都被丢弃,然后我们将阿尔法值存储在int中,其十进制值在0到255之间。

编辑:如果您已经有从getAlpha()返回的alpha值,您可以将其乘以255,并将其降为:

int alpha = Math.floor(myView.getAlpha() * 255);

您可以将HEX转换为Decimal简单使用,

int i= Integer.parseInt(HEX_STR,16);

或者如果您需要传递长十六进制值,则表示使用类似

public static long hexToLong(String hex) {
return Long.parseLong(hex, 16);
}

要获得每个单独的int值:

            int argb = Color.parseColor("#00112233");
            int alpha = 0xFF & (argb >> 24);
            int red = 0xFF & (argb >> 16);
            int green = 0xFF & (argb >> 8);
            int blue = 0xFF & (argb >> 0);

最新更新