了解Android上的颜色(六个字符)

Understanding colors on Android (six characters)

我试图理解颜色在Android中是如何工作的。我将此颜色设置为我的LinearLayout的背景,我得到一个具有一定透明度的背景灰色:

1
2
<gradient android:startColor="#b4555555" android:endColor="#b4555555"
 android:angle="270.0" />

如果我删除最后两个字符(55),我会得到一个纯色,失去透明度。我试图找到一个页面,在那里我可以看到一些关于这个的解释,但我找不到它。


Android使用十六进制argb值,其格式为aarrggbb。第一对字母aa代表alpha通道。必须将十进制不透明度值转换为十六进制值。步骤如下:

α十六进制值处理

  • 以不透明度为十进制值,乘以255。所以,如果你有一个50%不透明的块,那么十进制的值是0.5。例如:.5 x 255=127.5
  • 分数不会转换为十六进制,因此必须将数字向上或向下舍入为最接近的整数。例如:127.5回合高达128;55.25回合低达55。
  • 在十进制到十六进制转换器中输入十进制值,如http://www.binaryhexconverter.com/decimal-to-hex-converter,然后转换您的值。
  • 如果只返回一个值,请在其前面加一个零。例如,如果你试图得到5%的不透明度,并且你正在经历这个过程,你最终会得到十六进制的d值。在它前面加一个零,使它看起来像0d。
  • 这就是如何找到alpha通道值。我冒昧地为你列出了一份价值观清单。享受!

    十六进制不透明度值

    • 100% -氟
    • 95%—F2
    • 90% E6
    • 85% -D9
    • 80% -毫升
    • 75%高炉
    • 70%—B3
    • 65% -A6
    • 60%—99
    • 55%—8C
    • 50%—80
    • 45%—73
    • 40%—66
    • 35%—59
    • 30%—4D
    • 25%—40
    • 20%—33
    • 15%—26
    • 10%—1A
    • 5%—0D
    • 0%—00


    从@ BrOnDeffRoad中得到答案,这里有一些Java代码来将每个十六进制值从100%到0% alpha:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    for (double i = 1; i >= 0; i -= 0.01) {
        i = Math.round(i * 100) / 100.0d;
        int alpha = (int) Math.round(i * 255);
        String hex = Integer.toHexString(alpha).toUpperCase();
        if (hex.length() == 1)
            hex ="0" + hex;
        int percent = (int) (i * 100);
        System.out.println(String.format("%d%% — %s", percent, hex));
    }

    输出:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    100% — FF
    99% — FC
    98% — FA
    97% — F7
    96% — F5
    95% — F2
    94% — F0
    93% — ED
    92% — EB
    91% — E8
    90% — E6
    89% — E3
    88% — E0
    87% — DE
    86% — DB
    85% — D9
    84% — D6
    83% — D4
    82% — D1
    81% — CF
    80% — CC
    79% — C9
    78% — C7
    77% — C4
    76% — C2
    75% — BF
    74% — BD
    73% — BA
    72% — B8
    71% — B5
    70% — B3
    69% — B0
    68% — AD
    67% — AB
    66% — A8
    65% — A6
    64% — A3
    63% — A1
    62% — 9E
    61% — 9C
    60% — 99
    59% — 96
    58% — 94
    57% — 91
    56% — 8F
    55% — 8C
    54% — 8A
    53% — 87
    52% — 85
    51% — 82
    50% — 80
    49% — 7D
    48% — 7A
    47% — 78
    46% — 75
    45% — 73
    44% — 70
    43% — 6E
    42% — 6B
    41% — 69
    40% — 66
    39% — 63
    38% — 61
    37% — 5E
    36% — 5C
    35% — 59
    34% — 57
    33% — 54
    32% — 52
    31% — 4F
    30% — 4D
    29% — 4A
    28% — 47
    27% — 45
    26% — 42
    25% — 40
    24% — 3D
    23% — 3B
    22% — 38
    21% — 36
    20% — 33
    19% — 30
    18% — 2E
    17% — 2B
    16% — 29
    15% — 26
    14% — 24
    13% — 21
    12% — 1F
    11% — 1C
    10% — 1A
    9% — 17
    8% — 14
    7% — 12
    6% — 0F
    5% — 0D
    4% — 0A
    3% — 08
    2% — 05
    1% — 03
    0% — 00

    javascript版本如下:

    1
    2
    3
    4
    5
    6
    7
    8
    var text = document.getElementById('text');
    for (var i = 1; i >= 0; i -= 0.01) {
        i = Math.round(i * 100) / 100;
        var alpha = Math.round(i * 255);
        var hex = (alpha + 0x10000).toString(16).substr(-2).toUpperCase();
        var perc = Math.round(i * 100);
        text.innerHTML += perc +"% —" + hex +" (" + alpha +")</br>";
    }
    1
     

    你也可以只搜索"数字到十六进制",其中"数字"是0到255之间的任何值。


    如果提供6个十六进制数字,则表示RGB(红色、绿色和蓝色的每个值有2个十六进制数字)。

    如果您提供8个十六进制数字,那么它是argb(每个alpha、red、green和blue值分别有2个十六进制数字)。

    因此,去掉最后的55,你将从A=B4,R=55,G=55,B=55(大部分是透明的灰色),变为R=B4,G=55,B=55(完全不透明的淡粉色)。

    有关支持的格式,请参阅"颜色"文档。


    安卓材料设计

    这些是设置文本颜色不透明度级别的转换。

    • 100%:FF
    • 87%:DE
    • 70%:B3
    • 54%:8A
    • 50%:80
    • 38%:61
    • 12%:1F

    浅色背景上的深色文本

    enter image description here

    • 正文:DE000000
    • 次要文本:8A000000
    • 禁用的文本、提示文本和图标:61000000
    • 分隔器:1F000000

    深色背景上的白色文本

    enter image description here

    • 正文:FFFFFFFF
    • 次要文本:B3FFFFFF
    • 禁用的文本、提示文本和图标:80FFFFFF
    • 分隔器:1FFFFFFF

    也见

    • 在这里查找任何百分比。


    在android上,颜色可以指定为rgb或argb。

    http://en.wikipedia.org/wiki/argb网站

    在rgb中,每种颜色(红、绿、蓝)有两个字符,在argb中,alpha通道有两个附加字符。

    所以,如果您有8个字符,它是argb,前两个字符指定alpha通道。如果删除前导的两个字符,则仅为RGB(纯色,无alpha/透明度)。如果要在Java源代码中指定颜色,则必须使用:

    1
    2
    3
    4
    5
    6
    int Color.argb (int alpha, int red, int green, int blue)

    alpha  Alpha component [0..255] of the color
    red    Red component [0..255] of the color
    green  Green component [0..255] of the color
    blue   Blue component [0..255] of the color

    参考文献:阿尔布


    8位十六进制颜色值是a rgb(alpha、red、green、blue)的表示,而6位值仅假定100%不透明度(完全不透明),并仅定义rgb值。因此,要使其完全不透明,可以使用ff555555或仅使用555555。每个2位十六进制值是一个字节,表示0-255之间的值。


    在新的Chrome版本(可能是67.0.3396.62)中,CSS Hex颜色可以使用这个模型显示,

    如:

    1
    2
    3
    div{
      background-color:#FF00FFcc;
    }

    CC是不透明的,但旧的Chrome不支持该mod