Манипулировать альфа-байты Java / Android color int

Если у меня есть int в Java, который я использую в качестве цвета Android (для рисования на холсте), как мне манипулировать только альфа-компонентом этого int? Например, как я могу использовать операцию для этого:

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

В идеале было бы неплохо умножить эти первые байты на любой factor , а не просто установить байты на статическое значение.

Solutions Collecting From Web of "Манипулировать альфа-байты Java / Android color int"

Проверьте класс « Цвет ».

Ваш код будет выглядеть примерно так.

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

Таким образом, обертка этого метода может выглядеть так:

 public int adjustAlpha(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-класса немного более самодокументируется, просто делая манипуляции с битами самостоятельно, плюс это уже сделано для вас.

Альтернативой является:

 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 

Используйте ColorUtils # setAlphaComponent в android-support-v4.

В android-support-v4.

 int alpha = 85; textView.setBackgroundColor(ColorUtils.setAlphaComponent(Color.Red,alpha)); 

Это напрямую не отвечает на вопрос, но хорошо помнить, что View и Drawable имеют метод setAlpha (float alpha), который может делать то, что вы хотите. Или вы можете попробовать view.getBackground (). SetAlpha ().