Jeśli mam int w Javie, którego używam jako koloru Androida (do rysowania na kanwie), jak mogę manipulować tylko składnikiem alfa tego int? Na przykład, jak mogę użyć operacji, aby to zrobić:
int myOpaqueColor = 0xFFFFFF;
float factor = 0;
int myTransparentColor = operationThatChangesAlphaBytes(myOpaqueColor, factor);
//myTransparentColor should now = 0x00FFFFFF;
W idealnym przypadku byłoby miło pomnożyć te pierwsze bajty przez factor
to, co jest, zamiast po prostu ustawić bajty na wartość statyczną.
java
android
bit-manipulation
jn_pdx
źródło
źródło
ColorUtils.setAlphaComponent()
robi dokładnie toColorUtils
to teraz jest właściwa droga, ale ta klasa nie istniała, kiedy pisałem tę odpowiedź.Użyj ColorUtils # setAlphaComponent w android-support-v4.
źródło
w android-support-v4 :
int alpha = 85; //between 0-255 @ColorInt int alphaColor = ColorUtils.setAlphaComponent(Color.Red, alpha);
źródło
Alternatywą jest:
int myOpaqueColor = 0xffffffff; byte factor = 20;// 0-255; int color = ( factor << 24 ) | ( myOpaqueColor & 0x00ffffff );
Lub używając float:
int myOpaqueColor = 0xffffffff; float factor = 0.7f;// 0-1; int color = ( (int) ( factor * 255.0f ) << 24 ) | ( myOpaqueColor & 0x00ffffff);
Możesz zmienić dowolny kanał, zmieniając wartość bitową
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
źródło
To nie jest bezpośrednią odpowiedzią na pytanie, ale dobrze jest pamiętać, że View i Drawable mają metodę setAlpha (float alpha), która może zrobić to, co chcesz. Lub możesz spróbować view.getBackground (). SetAlpha ().
źródło