我正在为我的应用程序小部件实现一个小部件透明度选项,尽管我有一些麻烦得到十六进制颜色值正确。完全新的十六进制颜色透明度我搜索了一下,虽然我找不到一个具体的答案,我的问题。
我想通过十六进制颜色来设置透明度假设我的十六进制颜色id为#33b5e5我想让它的透明度为50%。然后我使用“#8033b5e5”,因为80是50%。
我在这里找到了一个有用的图表:http://www.dtp-aus.com/hexadeci.htm。根据这些数据,我得出了这个结论:
0% = #00
10% = #16
20% = #32
30% = #48
40% = #64
50% = #80
60% = #96
70% = #112
80% = #128
90% = #144
当十六进制大于100时,问题就出现了。十六进制颜色码只能有8个符号长,对吗?例如#11233b5e5(80%)崩溃。
我该怎么做才能使我也能使用更高的数字呢?
我知道这是一个老问题,但我在做类似的事情时遇到过这个问题。
使用SASS,你有一个非常优雅的方式将RGBA转换为十六进制ARGB: ie-hex-str。我在mixin中使用了它。
@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);
}
输出:
.transparent {
Background-color: rgba(88, 153, 131, 0.8);
}
.lt-ie9 .transparent {
背景颜色:透明;
过滤器:progid: DXImageTransform.Microsoft。梯度(GradientType = 0, startColorstr = # CC589983, endColorstr = ' # CC589983 ');
变焦:1;
}
我总是来这里检查int/hex的值。因此,我最终在我的java utils类中创建了一个简单的方法。此方法将透明度百分比转换为十六进制值并附加到颜色代码字符串值。
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();
}
所以,跑龙套。setColorAlpha(30,“#000000”)将给你#4c000000