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

时间:2016-05-12 06:06:45

标签: android alpha argb

假设我在android中将背景颜色设置为# AF 000000( AA RRGGBB)。 我想要十进制(0-255)的alpha通道( AA )的值,这将是175。

如何以编程方式完成该任务?

3 个答案:

答案 0 :(得分:3)

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

您是否将此值存储在Stringint中?如果您使用String,请首先删除#字符,然后将其转换为int

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

然后我们需要进行一些操作。此十六进制颜色表示意味着(在ARGB模式下)您具有值#AARRGGBB。这是每个通道的2个字节,包括alpha通道。要获得alpha通道(十六进制值的AA部分),我们需要“向右推6个字节”(Java是Big Endian languange)所以我们最终会得到像#000000AA这样的东西。由于每个字节由8位组成,我们必须“推”将alpha值6 * 8 = 24“放到右边”

int alpha = color >> 24;

此过程称为Bit Shifting。丢弃所有最右边的RGB值,然后我们将alpha值存储在int中,小数值在0到255之间。

编辑:如果您已经拥有从getAlpha()返回的alpha值,则可以将其乘以255并将其置于最低位置:

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

答案 1 :(得分:0)

您可以将HEX转换为十进制,只需使用,

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

或者如果你需要传递长十六进制值意味着使用like,

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

答案 2 :(得分:0)

获取每个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);