Si tengo un int en Java que estoy usando como un color de Android (para dibujar en un Canvas), ¿cómo manipulo solo el componente alfa de ese int? Por ejemplo, ¿cómo puedo usar una operación para hacer esto?
int myOpaqueColor = 0xFFFFFF;
float factor = 0;
int myTransparentColor = operationThatChangesAlphaBytes(myOpaqueColor, factor);
//myTransparentColor should now = 0x00FFFFFF;
Idealmente, sería bueno multiplicar esos primeros bytes por lo que factor
sea, en lugar de simplemente establecer los bytes en un valor estático.
java
android
bit-manipulation
jn_pdx
fuente
fuente
ColorUtils.setAlphaComponent()
hace exactamente estoColorUtils
es la manera correcta ahora, pero esa clase no existía cuando escribí esta respuesta.Utilice ColorUtils # setAlphaComponent en android-support-v4.
fuente
en android-support-v4 :
int alpha = 85; //between 0-255 @ColorInt int alphaColor = ColorUtils.setAlphaComponent(Color.Red, alpha);
fuente
Una alternativa es:
int myOpaqueColor = 0xffffffff; byte factor = 20;// 0-255; int color = ( factor << 24 ) | ( myOpaqueColor & 0x00ffffff );
O usando flotador:
int myOpaqueColor = 0xffffffff; float factor = 0.7f;// 0-1; int color = ( (int) ( factor * 255.0f ) << 24 ) | ( myOpaqueColor & 0x00ffffff);
Puede cambiar cualquier canal cambiando el valor bit a bit
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
fuente
Esto no responde directamente a la pregunta, pero es bueno recordar que View y Drawable tienen un método setAlpha (float alpha) que puede hacer lo que quieras. O tal vez desee probar view.getBackground (). SetAlpha ().
fuente