假设我在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);