安卓系统:颜色代码

3
我正在使用AmbilWarna库实现颜色选择器,并开启了alpha通道。
示例代码如下:https://code.google.com/p/android-color-picker/ 虽然返回了颜色代码,
  • 中等透明的亮绿色:颜色代码 = 1980104448
  • 中等透明的亮黄色:颜色代码 = 1912340224
  • 不透明的亮红色:颜色代码= -65536(负数?)
  • 无透明度的白色:颜色代码 = -1
  • 完全透明的白色:颜色代码 = 16777215
问题:
我想使用这些返回的颜色代码来设置按钮的背景颜色。这些颜色代码应该如何解释?为什么有些是负数?需要将其转换为RGB代码吗?

你可以直接使用这些值来设置背景色。 - nhaarman
1个回答

4

所有数值都是十进制的。

白色,透明度为100%:颜色代码=16777215

16777215(10) = FFFFFF(16)

您无需转换,可以直接设置。

myView.setBackgroundColor(value);

如果您有十六进制值,例如“#FFFFFF”,我们必须设置为

myView.setBackgroundColor(Color.parseColor("#FFFFFF"));

调用Color.parseColor("#FFFFFF");,它会返回int

下面的方法来自android.graphics.Color.java

/**
 * Parse the color string, and return the corresponding color-int.
 * If the string cannot be parsed, throws an IllegalArgumentException
 * exception. Supported formats are:
 * #RRGGBB
 * #AARRGGBB
 * 'red', 'blue', 'green', 'black', 'white', 'gray', 'cyan', 'magenta',
 * 'yellow', 'lightgray', 'darkgray', 'grey', 'lightgrey', 'darkgrey',
 * 'aqua', 'fuschia', 'lime', 'maroon', 'navy', 'olive', 'purple',
 * 'silver', 'teal'
 */
public static int parseColor(String colorString) {
    if (colorString.charAt(0) == '#') {
        // Use a long to avoid rollovers on #ffXXXXXX
        long color = Long.parseLong(colorString.substring(1), 16);
        if (colorString.length() == 7) {
            // Set the alpha value
            color |= 0x00000000ff000000;
        } else if (colorString.length() != 9) {
            throw new IllegalArgumentException("Unknown color");
        }
        return (int)color;
    } else {
        Integer color = sColorNameMap.get(colorString.toLowerCase(Locale.ROOT));
        if (color != null) {
            return color;
        }
    }
    throw new IllegalArgumentException("Unknown color");
}

在解析颜色之前,有必要将十进制转换为十六进制吗? - pearmak
不,你可以使用那些整数来设置背景颜色。 - Vahe Muradyan
1
@pearmak 不是的,底层数字既不是十进制也不是十六进制;它们当然是以二进制存储的。只是当用十六进制描述时,它们更容易阅读,因为每对十六进制数字——即一个字节——代表颜色的特定部分。例如,你的半透明亮绿色是1980104448。用十六进制表示,就是0x7605FF00 —— 0x76 表示透明度,0x05 表示红色,0xFF 表示绿色,0x00 表示蓝色。我们使用十六进制表示法,因为它易于阅读,考虑到颜色值的存储方式。仅凭外观,您就可以看到它主要是绿色的。 - Matt Gibson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接