【问题标题】:Android: Color codesAndroid:颜色代码
【发布时间】:2014-08-03 12:36:18
【问题描述】:

我正在使用 AmbilWarna 的库来实现颜色选择器,并启用了 alpha。

示例代码如下:https://code.google.com/p/android-color-picker/

在返回颜色代码时,

  • 具有中等透明度的亮绿色:颜色代码 = 1980104448
  • 具有中等透明度的亮黄色:颜色代码 = 1912340224
  • 不透明的亮红色:颜色代码 = -65536(负数?)
  • 没有透明度的白色:颜色代码 = -1
  • 100% 透明度的白色:颜色代码 = 16777215

问题:

我想使用这些返回的颜色代码来设置按钮的背景颜色。如何解释这些颜色代码?为什么有些人是消极的?是否需要转成RGB码?

【问题讨论】:

  • 您可以直接使用这些值来设置背景颜色。

标签: android color-picker color-codes


【解决方案1】:

所有值都是十进制的。

white with 100% transparency: color code = 16777215

16777215(10) = FFFFFF(16)

这个不用转换,直接设置即可。

myView.setBackgroundColor(value);

如果你有 HEX 值 ex "#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 没有;基础数字本质上既不是十进制也不是十六进制;当然,它们以二进制形式存储。只是当用十六进制描述时它们更容易阅读,因为每对十六进制数字(一个字节)代表颜色的特定部分。例如,具有中等透明度的亮绿色为 1980104448。以十六进制表示,即 0x7605FF00 — 0x76 透明,0x05 红色,0xFF 绿色,0x00 蓝色。我们使用十六进制表示符号,因为考虑到颜色值的存储方式,它很容易阅读。只要看一下,您就可以看到它主要是绿色的。
猜你喜欢
  • 2016-08-20
  • 1970-01-01
  • 1970-01-01
  • 2016-11-28
  • 2014-04-15
  • 2016-08-09
  • 1970-01-01
  • 2020-12-25
  • 1970-01-01
相关资源
最近更新 更多