jn_*_*pdx 69 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;
Run Code Online (Sandbox Code Playgroud)
理想情况下,将这些第一个字节乘以任何数字factor
都是很好的,而不是仅仅将字节设置为静态值.
maj*_*ors 162
查看Color类.
你的代码看起来有点像这样.
int color = 0xFFFFFFFF;
int transparent = Color.argb(0, Color.red(color), Color.green(color), Color.blue(color));
Run Code Online (Sandbox Code Playgroud)
因此将其包装在方法中可能如下所示:
@ColorInt
public static int adjustAlpha(@ColorInt int color, float factor) {
int alpha = Math.round(Color.alpha(color) * factor);
int red = Color.red(color);
int green = Color.green(color);
int blue = Color.blue(color);
return Color.argb(alpha, red, green, blue);
}
Run Code Online (Sandbox Code Playgroud)
然后调用它来设置透明度,比方说,50%:
int halfTransparentColor = adjustAlpha(0xFFFFFFFF, 0.5f);
Run Code Online (Sandbox Code Playgroud)
我认为使用提供的Color类有点自我记录,只是自己进行位操作,而且已经为你完成了.
che*_*upt 67
在android-support-v4中使用ColorUtils#setAlphaComponent.
Mas*_*ali 43
int alpha = 85; //between 0-255
@ColorInt
int alphaColor = ColorUtils.setAlphaComponent(Color.Red, alpha);
Run Code Online (Sandbox Code Playgroud)
Rat*_*ata 37
另一种选择是:
int myOpaqueColor = 0xffffffff;
byte factor = 20;// 0-255;
int color = ( factor << 24 ) | ( myOpaqueColor & 0x00ffffff );
Run Code Online (Sandbox Code Playgroud)
或者使用float:
int myOpaqueColor = 0xffffffff;
float factor = 0.7f;// 0-1;
int color = ( (int) ( factor * 255.0f ) << 24 ) | ( myOpaqueColor & 0x00ffffff);
Run Code Online (Sandbox Code Playgroud)
您可以通过更改按位值来更改任何通道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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
32488 次 |
最近记录: |