2013-06-21 5 views
12

Je travaille sur une application de graphique à barres simple qui utilise une matrice statique de couleurs pour diviser les couleurs de barres. Je voudrais que la fonctionnalité soit dessiner des barres normalement, ou légèrement transparent.Rendre une couleur plus transparente par programmation

Existe-t-il un moyen d'ajuster par programmation un entier de couleur afin qu'il soit légèrement transparent? Ou devrais-je définir statiquement une version transparente de chaque couleur, puis passer à l'utilisation de ces versions chaque fois que je veux de la transparence?

+0

Jetez un oeil à setAlpha http://developer.android.com/reference/android/view/View.html#setAlpha(float) –

Répondre

8

Bien sûr ... Regardez couleur et il y a une fonction:

static int argb(int alpha, int red, int green, int blue) 

Retour d'une couleur int à partir d'alpha, composantes rouge, vert, bleu.

Ainsi, vos valeurs RVB peuvent être statiques et vous devez simplement augmenter la valeur alpha pour obtenir une nouvelle version transparente de la couleur.

+2

Merci une tonne! Pour ceux d'entre vous se demandant comment obtenir les valeurs RVB à partir d'un entier, regardez ici: http: // stackoverflow.com/questions/5526690/convert-a-raw-negative-rgb-int-value-back-to-a-3-number-rgb-value – TrolliOlli

+0

De rien. Encore plus bienvenue si vous étiez la réponse acceptée. :) – spartygw

1

Essayez le code suivant

int color = (int)Long.parseLong(your_color, 16); 
int r = (color >> 16) & 0xFF; 
int g = (color >> 8) & 0xFF; 
int b = (color >> 0) & 0xFF; 

si le code de couleur a alpha puis

int alpha= (color >> 24) & 0xFF; 
45

Si vous utilisez la bibliothèque de support, vous pouvez utiliser ColorUtils.setAlphaComponent(int color, int alpha). Si vous n'utilisez pas une bibliothèque, un solution d'une ligne prenant à partir de son code source est:

int res = (color & 0x00ffffff) | (alpha << 24);

+1

Cela devrait être la bonne réponse. C'est plus simple et setAlphaComponent fonctionne très bien tant que l'entier alpha est compris entre 0 et 250. –

+1

Je_With_Stupid entre 0 et 255 pour être plus précis –

+0

ColorUtils.setAlphaComponent a été ajouté à l'API (22.1) ~ 2 ans après cette question posté. Toute la classe ColorUtils contient tout un tas de choses intéressantes. Toute personne qui trébuche sur ce fil maintenant serait bien servi pour l'examiner (https://developer.android.com/reference/android/support/v4/graphics/ColorUtils.html) – spartygw

2

De la réponse haut j'ai créé une méthode pour le faire:

private Android.Graphics.Color AddTransparencyToColour(Android.Graphics.Color color, int transparancy) 
{ 
    return Android.Graphics.Color.Argb(transparancy, color.R, color.G, color.B); 
} 

Il est également intéressant noteing que cela peut être modifié à une méthode d'extension comme si

public static ColorExtensions 
{ 
    public static Android.Graphics.Color AddTransparency(this Android.Graphics.Color color, int transparancy) 
    { 
     return Android.Graphics.Color.Argb(transparancy, color.R, color.G, color.B); 
    } 
} 

en ce qui concerne la valeur alpha, de MSDN Color.FromArgb:

Remarques

Pour créer une couleur opaque, définissez alpha à 255. Pour créer une couleur semi-transparent, définissez alpha à une valeur de 1 à 254.

2

Salut à vous pourrait utiliser le:

android.support.v4.graphics.ColorUtils # setAlphaComponent

note: l'alpha est ici de 0 à 255 et non basé sur%.

Il existe également d'autres méthodes util telles que les calculs de contrat et de luminosité.

Cordialement

Questions connexes