Я работаю над реализацией опции прозрачности виджета для виджета моего приложения, хотя у меня возникли проблемы с правильной оценкой значений шестнадцатеричного цвета. Будучи совершенно новой для прозрачности шестнадцатеричного цвета, я искал немного, хотя я не мог найти конкретного ответа на мой вопрос.
Я хочу установить прозрачность по шестнадцатеричному цвету, так что скажем, мой идентификатор шестнадцатеричного цвета "# 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%).
Что я могу сделать, чтобы позволить мне использовать более высокие номера?
Здесь приведена правильная таблица процентов к шестнадцатеричным значениям. Например. для 50% белых вы используете # 80FFFFFF.
(источник)
Вы можете увидеть полную таблицу процентов до шестнадцатеричных значений и запустить код на этой игровой площадке в https://play.golang.org/p/l1JaPYFzDkI.
Дополнительная информация для преобразования десятичного числа <=> шестнадцатеричный
Проблема может быть решена в общем случае путем кросс-умножения.
У нас есть процент (от 0 до 100) и другое число (от 0 до 255), а затем преобразованное в шестнадцатеричное.
Для 1%
Для 2%
Таблица в лучшем ответе дает процентный шаг 5%.
Как рассчитать числа между вами в голове? Из-за 2,5 приращения добавьте 2 к первому и 3 к следующему
Я предпочитаю учить, как найти решение, а не передавать таблицу
Дайте человеку рыбу, и вы накормите его на день; научить человека ловить рыбу, и вы кормите его на всю жизнь
Обозначение цвета шестнадцатеричной формы выглядит следующим образом: #AARRGGBB
Вы должны сначала посмотреть, как работает hexadecimal. Вы можете написать не более FF.
Эта диаграмма не показывает проценты. "# 90" не "90%". Этот график показывает шестнадцатеричное преобразование с десятичной точностью. Шестнадцатеричный номер 90 (обычно представленный как 0x90) эквивалентен десятичному числу 144.
Шестнадцатеричные числа - это base-16, поэтому каждая цифра имеет значение от 0 до F. Максимальное значение для шестибайтового значения в два байта (например, прозрачность цвета) равно 0xFF или 255 в десятичной форме. Таким образом, 100% равно 0xFF.
Это может быть очень поздний ответ. Но эта диаграмма убивает его.
Все процентные значения отображаются в шестнадцатеричные значения.
Я построил этот небольшой вспомогательный метод для приложения для Android, может пригодиться:
/**
* @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;
}
попробуйте это в поиске Google (или нажмите здесь)
255 * .2 to hex
в результате он сгенерирует 0x33
.
Однако Google не округляет значения, поэтому вы можете использовать только 1-значные множители. если вы хотите использовать say.85, сначала вы должны получить округленное значение 255 *.85, а затем введите (rounded-value here) to hex
в поиске Google.
Я понимаю, что это старый вопрос, но я наткнулся на него, когда делаю что-то подобное.
Используя SASS, у вас очень элегантный способ преобразования RGBA в hex ARGB: ie-hex-str
. Я использовал его здесь в микшинге.
@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 {
background-color: transparent;
filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#CC589983', endColorstr='#CC589983');
zoom: 1;
}
Используя python для вычисления этого, например (написанный на python 3), прозрачность 50%:
hex(round(256*0.50))
:)
Я всегда прихожу сюда, чтобы проверить значение int/hex alpha. Итак, создайте простой метод в моем классе 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();
}
Итак, Utils.setColorAlpha(30, "#000000")
даст вам #4c000000
FF
, 87%:DE
, 70%:B3
, 54%:8A
, 50%:80
, 38%:61
, 12%:1F