如果我在Java中使用了一个int作为Android颜色(用于在Canvas上绘图),那么如何操作该int的alpha组件呢?例如,我如何使用操作来执行此操作:
int myOpaqueColor = 0xFFFFFF;
float factor = 0;
int myTransparentColor = operationThatChangesAlphaBytes(myOpaqueColor, factor);
//myTransparentColor should now = 0x00FFFFFF;
理想情况下,将这些第一个字节乘以factor
是很好的,而不是仅仅将字节设置为静态值。
答案 0 :(得分:62)
在android-support-v4中使用ColorUtils#setAlphaComponent。
答案 1 :(得分:37)
:
int alpha = 85; //between 0-255
@ColorInt
int alphaColor = ColorUtils.setAlphaComponent(Color.Red, alpha);
答案 2 :(得分:36)
另一种选择是:
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
答案 3 :(得分:1)
这不是直接回答这个问题,但最好记住View和Drawable有一个setAlpha(float alpha)方法,可以做你想要的。或者您可能想尝试view.getBackground()。setAlpha()。