我刚尝试做过像
System.out.println("color == " + Color.parseColor("#F5F5F5"));
然后它返回
color == -657931
有谁知道为什么,拜托?
答案 0 :(得分:9)
首先,parseColor
方法将返回十六进制 F5F5F5
的整数表示形式,实际上是FFF5F5F5
+颜色的不透明度。
FFF5F5F5
的十进制值为4294309365
,然后将其转换为溢出的整数,从而得出您的负数。
这是溢出的一个例子
int i = (int)4294309365L; //4294309365L the decimal representation of FFF5F5F5
System.out.println(i); //result: -657931
答案 1 :(得分:3)
它做了它应该做的事情,它是#F5F5F5的int表示。 API中的This description表示为什么颜色可以为负而表示为int。
http://developer.android.com/reference/android/graphics/Color.html#parseColor(java.lang.String)
简短的言论:
32bit integer in hex:AARRGGBB
Transparent: Constant Value: 0 (0x00000000)
Black: Constant Value: -16777216 (0xff000000)
答案 2 :(得分:0)
这是Color.parseColor()的预期行为 http://developer.android.com/reference/android/graphics/Color.html#parseColor(java.lang.String)
public static int parseColor (String colorString)
该方法返回十六进制颜色的整数表示。
您可以在详细文档中找到更多信息。
http://developer.android.com/reference/android/graphics/Color.html
答案 3 :(得分:0)
好吧,要存储32位颜色值(0xFFFFFFFF - 带alpha的颜色),我们需要32位(2 ^ 32)但android上的Integer
支持最大值2 ^ 31-1({{ 3)})默认情况下,当使用unsigned和签名时,这会达到我们需要的完整2 ^ 32,这就是为什么解析后的颜色可以是负数(因为我们需要一个有符号整数来存储它)。
更多在https://developer.android.com/reference/java/lang/Integer.html,浮动,浮动,浮动,android.graphics.ColorSpace)