Если у меня есть int в Java, который я использую в качестве цвета Android (для рисования на холсте), как мне управлять только альфа-компонентом этого int? Например, как я могу использовать операцию для этого:
int myOpaqueColor = 0xFFFFFF;
float factor = 0;
int myTransparentColor = operationThatChangesAlphaBytes(myOpaqueColor, factor);
//myTransparentColor should now = 0x00FFFFFF;
В идеале было бы неплохо умножить эти первые байты на то factor
, что есть, а не просто устанавливать байты на статическое значение.
java
android
bit-manipulation
jn_pdx
источник
источник
ColorUtils.setAlphaComponent()
делает именно этоColorUtils
это правильный путь, но этого класса не существовало, когда я писал этот ответ.Используйте ColorUtils # setAlphaComponent в файле android-support-v4.
источник
в android-support-v4 :
int alpha = 85; //between 0-255 @ColorInt int alphaColor = ColorUtils.setAlphaComponent(Color.Red, alpha);
источник
Альтернатива:
int myOpaqueColor = 0xffffffff; byte factor = 20;// 0-255; int color = ( factor << 24 ) | ( myOpaqueColor & 0x00ffffff );
Или используя float:
int myOpaqueColor = 0xffffffff; float factor = 0.7f;// 0-1; int color = ( (int) ( factor * 255.0f ) << 24 ) | ( myOpaqueColor & 0x00ffffff);
Вы можете изменить любой канал, изменив побитовое значение
24
.public final static byte ALPHA_CHANNEL = 24; public final static byte RED_CHANNEL = 16; public final static byte GREEN_CHANNEL = 8; public final static byte BLUE_CHANNEL = 0; // using: byte red = 0xff; byte green = 0xff; byte blue = 0xff; byte alpha = 0xff; int color = ( alpha << ALPHA_CHANNEL ) | ( red << RED_CHANNEL ) | ( green << GREEN_CHANNEL ) | ( blue << BLUE_CHANNEL );// 0xffffffff
источник
Это не является прямым ответом на вопрос, но хорошо помнить, что View и Drawable имеют метод setAlpha (float alpha), который может делать то, что вы хотите. Или вы можете попробовать view.getBackground (). SetAlpha ().
источник