Dans la dernière application Android que j’ai développé, j’utilise un Color Picker (voir ci-dessous) plutôt sympa mais les couleurs trop claires posent problème. J’ai défini une couleur de police très claire (presque blanche) et si l’utilisateur sélectionne une couleur de fond claire, on n’y voit plus rien!
J’ai donc trouvé une solution et j’ai décidé de partager cette ‘astuce’ avec vous.
Etape 1 : Récupérer/convertir la couleur
Pour commencer, il faut avoir la couleur au format “int” (si c’est le cas, passez directement à l’étape 2).
Si vous récupérez une couleur au format hexadécimal, vous devez la convertir en utilisant les deux lignes ci-dessous :
[java]String hex = "#FFFFFF";
int value = Integer.parseInt(myString.replaceFirst("#", ""), 16); [/java]
Etape 2 : Obtenir le taux de luminosité
Le taux de luminosité s’obtient à partir de l’integer d’une couleur.
Si le taux est inférieur à 128, la couleur se rapproche du noir.
Si le taux est supérieur à 128, la couleur se rapproche du blanc.
[java] public static int getBrightness(int rgb)
{
int bri= ( 77 * ((argb>>16)&255)
+ 150 * ((argb>>8)&255)
+ 29 * ((argb)&255))>>8;
return bri;
}[/java]
Il vous suffit alors de tester le taux de luminosité en utilisant la valeur retournée par la méthode “getBrightness“.
Etape 3 : Test de la valeur
Ci-dessous, je filtre les couleurs supérieures à 150 (donc claires, se rapprochant du blanc).
[java] int lum = getBrightness(_col);
if (lum > 150)
{
_msgerreur = "Cette couleur est trop claire, vous n’y verrez rien.";
Toast.makeText(getBaseContext(), "Erreur: " + _msgerreur, Toast.LENGTH_SHORT).show();
}[/java]