操纵Java / Android color int的alpha字节

时间:2013-03-10 06:37:29

标签: java android bit-manipulation

如果我在Java中使用了一个int作为Android颜色(用于在Canvas上绘图),那么如何操作该int的alpha组件呢?例如,我如何使用操作来执行此操作:

int myOpaqueColor = 0xFFFFFF;
float factor = 0;
int myTransparentColor = operationThatChangesAlphaBytes(myOpaqueColor, factor);
//myTransparentColor should now = 0x00FFFFFF;

理想情况下,将这些第一个字节乘以factor是很好的,而不是仅仅将字节设置为静态值。

4 个答案:

答案 0 :(得分:62)

在android-support-v4中使用ColorUtils#setAlphaComponent

答案 1 :(得分:37)

<{3}}中的

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()。