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

理解Android上的颜色(六个字符),android,colors,hex,transparency,Android,Colors,Hex,Transparency,我试图理解Android中的颜色是如何工作的。我将此颜色设置为我的线性布局的背景,并得到一个带有一定透明度的灰色背景: <gradient android:startColor="#b4555555" android:endColor="#b4555555" android:angle="270.0" /> 如果我删除最后两个字符(55),我会得到一个纯色,失去透明度。我试图找到一个页面,在那里我可以看到一些关于这个的解释,但我找不到它 如果您提供6个十六进制数字,则表示RG

我试图理解Android中的颜色是如何工作的。我将此颜色设置为我的
线性布局的背景
,并得到一个带有一定透明度的灰色背景:

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


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

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

如果您提供8个十六进制数字,则它是一个ARGB(分别为alpha、红色、绿色和蓝色的每个值提供2个十六进制数字)

因此,通过删除最后的55,您将从A=B4,R=55,G=55,B=55(一种大部分透明的灰色)更改为R=B4,G=55,B=55(一种完全不透明的暗粉色)


有关支持的格式,请参见。

8位十六进制颜色值表示ARGB(Alpha、红色、绿色、蓝色),而6位值仅假设100%不透明度(完全不透明),并仅定义RGB值。因此,要使其完全不透明,可以使用#FF555555,也可以仅使用#555555。每个2位十六进制值是一个字节,表示0-255之间的值。

在Android上,颜色可以指定为RGB或ARGB

在RGB中,每种颜色有两个字符(红色、绿色、蓝色),在ARGB中,alpha通道有两个额外的字符

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

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

参考资料:

Android使用十六进制ARGB值,格式为#aarrggb。第一对字母AA代表阿尔法通道。必须将十进制不透明度值转换为十六进制值。以下是步骤:

阿尔法十六进制值处理

  • 将不透明度作为十进制值乘以255。所以,如果你有一个50%不透明的块,十进制值应该是。例如:.5x255=127.5
  • 分数不能转换为十六进制,因此必须将数字向上或向下舍入到最接近的整数。例如:127.5舍入到128;55.25四舍五入到55
  • 在十进制到十六进制转换器中输入十进制值,如,然后转换值
  • 如果只返回一个值,请在其前面加一个零。例如,如果您试图获得5%的不透明度,并且您正在经历此过程,那么最终将得到十六进制值D。在其前面添加一个零,使其显示为0D
  • 这就是找到alpha通道值的方法。我冒昧地为你们列出了一份价值观清单。享受吧

    十六进制不透明度值

    • 100%-FF
    • 95%-F2
    • 90%-E6
    • 85%-D9
    • 80%-CC
    • 75%高炉
    • 70%-B3
    • 65%-A6
    • 60%-99
    • 55%-8摄氏度
    • 50%-80
    • 45%-73
    • 40%-66
    • 35%-59
    • 30%-4D
    • 25%-40
    • 20%-33
    • 15%-26
    • 10%-1A
    • 5%-0D
    • 0%-00
      • 下面是一些Java代码,用于获取100%到0%alpha之间的每个十六进制值:

        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));
        }
        
        输出:

        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版本如下:

        var text=document.getElementById('text');
        对于(变量i=1;i>=0;i-=0.01){
        i=数学四舍五入(i*100)/100;
        var alpha=数学四舍五入(i*255);
        var hex=(alpha+0x10000).toString(16).substr(-2).toUpperCase();
        var perc=数学四舍五入(i*100);
        text.innerHTML+=perc+“%-”+hex+”(“+alpha+”)
        ”; }
        这些是用于设置文本颜色不透明度级别的转换

        • 100%:FF
        • 87%:德
        • 70%:B3
        • 54%:8A
        • 50%:80
        • 38%:61
        • 12%:1F
        浅色背景上的深色文本

        • 主要文本:
          DE000000
        • 辅助文本:
          8A000000
        • 禁用的文本、提示文本和图标:
          61000000
        • 除法器:
          1000000
        黑色背景上的白色文本

        • 主要文本:
          FFFFFFFF
        • 辅助文本:
          B3FFFFFF
        • 禁用的文本、提示文本和图标:
          80FFFFFF
        • 分隔符:
          1ffffffff
        另见
        • 查任何百分比
        在新的chrome版本(可能是67.0.3396.62)中,CSS十六进制颜色可以使用此型号显示器

        例如:


        cc是不透明的,但旧chrome不支持mod

        在Android上,颜色可以用以下格式声明

        #AARRGGBB
        
        AA
        -是我们最感兴趣的比特,它代表alpha通道

        RR
        GG
        BB
        -分别为红色、绿色和蓝色通道

        现在为了给颜色增加透明度,我们需要用十六进制值表示alpha(透明度)

        例如,如果您想将80%的透明度值设置为黑色(
        #000000
        ),则需要使用
        CC
        对其进行预处理,结果我们得到以下颜色资源
        #CC000000

        你可以在我的博客上读到更多细节

        十六进制代码中的颜色写为

        #AA RR GG BB
        #阿尔法红-绿-蓝

        对于每个组(AA、RR、GG、BB),可能的值为:
        ->00到FF(十六进制),即0到255(十进制)

        因此,要更改颜色的Alpha/AA/透明度,只需更改由AA组表示的十六进制字符串中的前两个十六进制字符

        F
        #AARRGGBB