Color.parseColor返回负数

时间:2014-08-01 06:13:01

标签: android

我刚尝试做过像

System.out.println("color == " + Color.parseColor("#F5F5F5"));

然后它返回

color == -657931

有谁知道为什么,拜托?

4 个答案:

答案 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)