Wenn ich ein Int in Java habe, das ich als Android-Farbe verwende (zum Zeichnen auf einer Leinwand), wie kann ich nur die Alpha-Komponente dieses Int bearbeiten? Wie kann ich zum Beispiel eine Operation verwenden, um dies zu tun:
int myOpaqueColor = 0xFFFFFF;
float factor = 0;
int myTransparentColor = operationThatChangesAlphaBytes(myOpaqueColor, factor);
//myTransparentColor should now = 0x00FFFFFF;
Im Idealfall wäre es schön, diese ersten Bytes mit dem zu multiplizieren, was sie factor
sind, anstatt nur die Bytes auf einen statischen Wert zu setzen.
quelle
ColorUtils.setAlphaComponent()
macht genau dasColorUtils
ist jetzt der richtige Weg, aber diese Klasse gab es nicht, als ich diese Antwort schrieb.Verwenden Sie ColorUtils # setAlphaComponent in android-support-v4.
quelle
in der android-support-v4 :
int alpha = 85; //between 0-255 @ColorInt int alphaColor = ColorUtils.setAlphaComponent(Color.Red, alpha);
quelle
Eine Alternative ist:
int myOpaqueColor = 0xffffffff; byte factor = 20;// 0-255; int color = ( factor << 24 ) | ( myOpaqueColor & 0x00ffffff );
Oder mit float:
int myOpaqueColor = 0xffffffff; float factor = 0.7f;// 0-1; int color = ( (int) ( factor * 255.0f ) << 24 ) | ( myOpaqueColor & 0x00ffffff);
Sie können jeden Kanal ändern, indem Sie den bitweisen Wert ändern
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
quelle
Dies beantwortet die Frage nicht direkt, aber es ist gut zu bedenken, dass View und Drawable eine setAlpha-Methode (float alpha) haben, die möglicherweise das tut, was Sie wollen. Oder Sie möchten view.getBackground (). SetAlpha () ausprobieren.
quelle