【问题标题】:Hex Colors in Android are some times 8 digits. How? What is the difference between #FFFFFF and #FFFFFF00Android 中的十六进制颜色有时是 8 位数字。如何? #FFFFFF 和 #FFFFFF00 有什么区别
【发布时间】:2024-04-19 15:50:01
【问题描述】:

我有时会在示例中看到 Android 中的着色是 #FF191919。我的意思是 8 位十六进制数。但它应该只是一个 6 位数字。它们有什么关系?如果我想将 6 位数字转换为 8 位数字。怎么做?我的意思是将 #424242 转换为 8 位数字着色?请让我知道详情。感谢您的时间和帮助。

【问题讨论】:

    标签: android android-layout colors hex android-canvas


    【解决方案1】:

    额外的 2 位数字用于定义颜色透明度或 alpha 通道。

    Android 使用 ARGB format(或您在示例中使用的 AARRGGBB)

    有关更多(Android 特定)信息,请查看颜色documentation

    【讨论】:

    • 是否有一个好的程序可以在输入所有 8 位数字后显示颜色?
    • 有很多:任何自尊的绘图应用程序都接受 RGBA 输入并显示结果颜色。或搜索“rgb 颜色选择器”或“rgb 色轮”以查找提供此服务的网站。 (注意:字母数字并不是很有趣,因为它们定义了透明度并且不影响颜色)
    • 仅回答并不能清楚地说明哪些是额外的 2 位数字。前两个?最后两个?中间某处的两位数?
    • 'extra 2 digits' 建议附加(最后两个),但我会更新答案以使其明确和正确
    【解决方案2】:

    前两个字符代表 alpha(透明度)值,其中FF 完全可见。这称为 aRGB。

    【讨论】:

    • 所以例如#FF000000#000000 相同,只是纯黑色?
    【解决方案3】:

    8 位十六进制是ARGB 颜色。它与通常的RGB 相同,但提供了一个额外的 Alpha 通道。

    RGB 中的#RRGGBB 与 ARGB 中的#00RRGGBB 相同。也可以看看Color.argb

    【讨论】:

      【解决方案4】:

      8 位 Android HEx 称为 aRGB。 aRGB 值通常使用 8 个十六进制数字表示,每对十六进制数字分别代表 Alpha、Red、Green 和 Blue 通道的值。例如 80FFFF00 表示 50.2% 不透明(非预乘)黄色。十六进制值 80,即十进制的 128,表示 50.2% 的 alpha 值,因为 128 大约是最大值 255(FF hex)的 50.2%;继续破译80FFFF00的值,第一个FF代表红色能有的最大值;第二个 FF 与前一个相同,但为绿色;最后的 00 表示蓝色可以具有的最小值(实际上 - 没有蓝色)。因此红色+绿色产生黄色。在不使用 alpha 的情况下,可以将其缩短为 6 位 RRGGBB,这就是为什么选择将 alpha 放在最高位的原因。根据上下文,将 0x 或数字符号 (#)[1] 放在十六进制数字之前。

      【讨论】:

        【解决方案5】:

        用 alpa 级别定义的 8 位颜色

        让我们将所有我们定义的十六进制颜色提取为 6 个值对,每对 rgb 2 位

        第一个 2 位代表红色,第 2 个 2 位代表绿色,第 3 个 2 位代表蓝色,如果你想设置它的 alpha 级别,那么它用 8 位定义为 ARGB 所以,现在第 1 个 2 位值被定义为alpha 和 rest 用于 RGB

        【讨论】: