Javaにintがあり、それをAndroid色(Canvasでの描画用)として使用している場合、そのintのアルファコンポーネントのみを操作するにはどうすればよいですか?たとえば、操作を使用してこれを行うにはどうすればよいですか:
int myOpaqueColor = 0xFFFFFF;
float factor = 0;
int myTransparentColor = operationThatChangesAlphaBytes(myOpaqueColor, factor);
//myTransparentColor should now = 0x00FFFFFF;
理想的には、単にバイトを静的な値に設定するのではなく、最初のバイトにfactor
を掛けるのがいいでしょう。
Color クラスを確認してください。
コードは次のようになります。
int color = 0xFFFFFFFF;
int transparent = Color.argb(0, Color.red(color), Color.green(color), Color.blue(color));
したがって、メソッドでラップする方法は次のようになります。
@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);
}
そして、それを呼び出して、透明度を、たとえば50%に設定します。
int halfTransparentColor = adjustAlpha(0xFFFFFFFF, 0.5f);
提供されたColorクラスを使用することは、自分でビット操作を行うだけでなく、すでに行われていることを示す、もう少し自己文書化できると思います。
Android-support-v4で ColorUtils#setAlphaComponent を使用します。
int alpha = 85; //between 0-255
@ColorInt
int alphaColor = ColorUtils.setAlphaComponent(Color.Red, alpha);
別の方法は次のとおりです。
int myOpaqueColor = 0xffffffff;
byte factor = 20;// 0-255;
int color = ( factor << 24 ) | ( myOpaqueColor & 0x00ffffff );
またはフロートを使用します:
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
これは質問に直接答えているわけではありませんが、ViewとDrawableにはsetAlpha(float alpha)メソッドがあり、必要に応じて実行できることを覚えておくと便利です。または、view.getBackground()。setAlpha()を試してください。