2013-03-10 9 views
49

私がAndroidカラー(Canvasで描画するために使用している)のintをJavaで使用している場合、そのintのアルファコンポーネントをどのように操作すればよいですか?どのように私はこれを行うための操作を使用することができますたとえば、:Java/Androidのカラーアルファベットのバイトを操作する

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

、それだけで静的な値にバイトを設定するのではなく、あるものは何でもfactorによってそれらの最初のバイトを乗算するとよいでしょう。

答えて

126

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); 

int color = 0xFFFFFFFF; 
int transparent = Color.argb(0, Color.red(color), Color.green(color), Color.blue(color)); 

だからのように見えるかもしれない方法でそれを包みます提供されているColorクラスは、自分でビット操作を行うだけでなく、既にあなたのために行われていることを少し書いています。

+1

'ColorUtils.setAlphaComponentは()'まさにこの – for3st

34

選択肢は次のとおりです。

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 
1

これは、直接の質問に答えていないが、それはビューとDrawableのは、あなたがやりたいかもしれませんsetAlpha(フロートアルファ)メソッドを持っていることを覚えておくことは良いことです。または、view.getBackground()。setAlpha()を試してみてください。

15

int alpha = 85; //between 0-255 
@ColorInt 
int alphaColor = ColorUtils.setAlphaComponent(Color.Red, alpha); 
+0

これは、このロジックを書き換える必要が正解ではないん – for3st