Android 색상 (캔버스에 그리기 위해)으로 사용중인 Java에 int가있는 경우 해당 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 클래스를 사용하는 것은 비트 조작을 직접 수행하고 이미 수행 한 것보다 좀 더 자체 문서화라고 생각합니다.
답변
사용 ColorUtils # setAlphaComponent을 안드로이드 지원-V4에.
답변
의 안드로이드 지원-V4 :
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 );
또는 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
답변
이것은 질문에 직접 답하는 것은 아니지만 View와 Drawable에는 원하는 작업을 수행 할 수있는 setAlpha (float alpha) 메서드가 있다는 것을 기억하는 것이 좋습니다. 또는 view.getBackground (). setAlpha ()를 시도 할 수 있습니다.