Manipuler des octets alpha de Java / Android couleur int

Si j’ai un int en Java que j’utilise comme couleur Android (pour dessiner sur un canevas), comment manipuler uniquement le composant alpha de cet int? Par exemple, comment puis-je utiliser une opération pour cela:

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

Idéalement, il serait bon de multiplier ces premiers octets par un factor quelconque, plutôt que de simplement définir les octets sur une valeur statique.

    Découvrez la classe de couleur .

    Votre code ressemblerait un peu à ceci.

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

    Donc, l’enrouler dans une méthode peut ressembler à ceci:

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

    Et puis appelez-le pour définir la transparence à, disons, 50%:

     int halfTransparentColor = adjustAlpha(0xFFFFFFFF, 0.5f); 

    Je pense que l’utilisation de la classe de couleur fournie est un peu plus auto-documentée que la simple manipulation du bit, et c’est déjà fait pour vous.

    Utilisez ColorUtils # setAlphaComponent dans android-support-v4.

    Une alternative est:

     int myOpaqueColor = 0xffffffff; byte factor = 20;// 0-255; int color = ( factor << 24 ) | ( myOpaqueColor & 0x00ffffff ); 

    Ou en utilisant float:

     int myOpaqueColor = 0xffffffff; float factor = 0.7f;// 0-1; int color = ( (int) ( factor * 255.0f ) << 24 ) | ( myOpaqueColor & 0x00ffffff); 

    Vous pouvez changer n'importe quel canal en changeant la valeur binary 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 

    dans le support Android-v4 :

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

    Cela ne répond pas directement à la question mais il est bon de se rappeler que View et Drawable ont une méthode setAlpha (float alpha) qui peut faire ce que vous voulez. Ou vous pouvez essayer view.getBackground (). SetAlpha ().