关于android:Hex颜色的透明度

Hex transparency in colors

本问题已经有最佳答案,请猛点这里访问。

我正在为我的应用程序小部件实现一个小部件透明选项,尽管我在获得正确的十六进制颜色值方面遇到了一些困难。作为一个全新的六角形颜色透明度,我搜索了一些,虽然我找不到一个具体的答案我的问题。

我想通过十六进制颜色设置透明度,所以假设我的十六进制颜色ID"33b5e5",我希望它是50%透明的。然后我用"8033B5E5",因为80是50%。

我在这里找到了一个有用的图表:http://www.dtp-aus.com/hexadeci.htm。有了这些数据,我想到了:

1
2
3
4
5
6
7
8
9
10
0% = #00
10% = #16
20% = #32
30% = #48
40% = #64
50% = #80
60% = #96
70% = #112
80% = #128
90% = #144

现在,当我的十六进制数超过100时,问题就开始出现了。十六进制色码只能是8个符号长,对吗?例如11233b5e5(80%)车祸。

我该怎么做才能使用更高的数字呢?


这是十六进制值的正确百分比表。例如,对于50%的白色,您可以使用80ffffff。

  • 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

(源)


简短回答

您可以在https://play.golang.org/p/l1japyfzdki中看到十六进制值的完整百分比表,并在此游乐场中运行代码。

伪码的简短解释十六进制值百分比

  • 小数=百分比*255/100。例:小数=50*255/100=127.5
  • 将十进制值转换为十六进制值。例如:127.5十进制=7*16?十六进制的1+15=7F
  • 十六进制值到百分比

  • 将十六进制的最小值转换为十进制。EX:D6=13×16?1+6=214
  • 百分比=(十进制值)*100/255。例如:214*100/255=84%
  • 转换十进制的更多信息<=>十六进制

    长答案:如何在头脑中计算

    这个问题一般可以用乘法来解决。

    我们有一个百分比(从0到100)和另一个数字(从0到255),然后转换为十六进制。

    • 100<=>255(十六进制FF)
    • 0<=>0(十六进制为00)

    为1%

    • 1*255/100=2,5
    • 如果你把它四舍五入,六边形中的2.5就是2。

    为2%

    • 2*255/100=5个
    • 六边形中的5是5。

    最佳答案中的表格给出了5%的百分比。

    如何计算你头脑中的数字?由于增量为2.5,第一个增加2,下一个增加3

    • 95%-F2/开始
    • 96%—f4//将2添加到f2
    • 97%-F7//添加3。或F2+ 5=F7
    • 98%-F9//添加2
    • 99%—fc//加3。9+3=12英寸六角:C
    • 100%—FF//加2

    我宁愿教你如何找到解决办法,也不愿教你怎么摆弄桌子

    Give a man a fish and you feed him for a day; teach a man to fish and
    you feed him for a lifetime


    颜色十六进制符号如下:

    • 阿尔法:阿尔法
    • 红色:红色
    • 绿色:绿色
    • B:蓝色

    您应该首先看看十六进制是如何工作的。你最多可以写FF。


    那张图表没有显示百分比。"#90"不是90%"。该图表显示十六进制到十进制的转换。十六进制数90(通常表示为0x90)相当于十进制数144。

    十六进制数以16为基数,因此每个数字都是0到F之间的值。双字节十六进制值(例如颜色的透明度)的最大值是0xff,或以十进制表示的255。因此100%为0xff。


    我为Android应用程序构建了这个小助手方法,可能会用到:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     /**
     * @param originalColor color, without alpha
     * @param alpha         from 0.0 to 1.0
     * @return
     */
    public static String addAlpha(String originalColor, double alpha) {
        long alphaFixed = Math.round(alpha * 255);
        String alphaHex = Long.toHexString(alphaFixed);
        if (alphaHex.length() == 1) {
            alphaHex ="0" + alphaHex;
        }
        originalColor = originalColor.replace("#","#" + alphaHex);


        return originalColor;
    }

    enter image description here

    这可能是个很晚的答案。但这张图表扼杀了它。

    所有百分比值都映射到十六进制值。

    网址:http://online.sfsu.edu/chrism/hexval.html


    在谷歌搜索上试试这个(或点击这里)

    255 * .2 to hex

    因此,它将生成0x33

    但是,Google不舍入值,因此只能使用1位乘法器。如果你想使用say.85,你必须先得到255.85的四舍五入值,然后在谷歌搜索中键入(rounded-value here) to hex


    我意识到这是一个古老的问题,但我在做类似的事情时遇到了这个问题。

    使用sass,您可以非常优雅地将rgba转换为hex argb:ie-hex-str。我在这里用过混音。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    @mixin ie8-rgba ($r, $g, $b, $a){
        $rgba: rgba($r, $g, $b, $a);
        $ie8-rgba: ie-hex-str($rgba);
        .lt-ie9 &{
          background-color: transparent;
          filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#{$ie8-rgba}', endColorstr='#{$ie8-rgba}');
      }
    }

    .transparent{
        @include ie8-rgba(88,153,131,.8);
        background-color: rgba(88,153,131,.8);
    }

    输出:

    1
    2
    3
    4
    5
    6
    7
    8
    .transparent {
      background-color: rgba(88, 153, 131, 0.8);
    }
    .lt-ie9 .transparent {
      background-color: transparent;
      filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#CC589983', endColorstr='#CC589983');
      zoom: 1;
    }


    例如,使用python计算(用python 3编写),50%的透明度:

    1
    hex(round(256*0.50))

    :)


    我总是来这里检查int/hex alpha值。最后,在我的Java UTLS类中创建一个简单的方法。此方法将百分比转换为十六进制值并附加到颜色代码字符串值。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     public static String setColorAlpha(int percentage, String colorCode){
        double decValue = ((double)percentage / 100) * 255;
        String rawHexColor = colorCode.replace("#","");
        StringBuilder str = new StringBuilder(rawHexColor);

        if(Integer.toHexString((int)decValue).length() == 1)
            str.insert(0,"#0" + Integer.toHexString((int)decValue));
        else
            str.insert(0,"#" + Integer.toHexString((int)decValue));
        return str.toString();
    }

    所以,Utils.setColorAlpha(30,"#000000")会给你#4c000000