come da titolo, la mia domanda è: Android fornisce un modo per analizzare/determinare se un colore (che sarà ovviamente dinamico per lo scopo) è chiaro o scuro?Controlla se il colore è scuro o chiaro in Android
risposta
Android non lo fornisce, è possibile implementare un metodo per determinarlo. Ecco un metodo per farlo:
public boolean isColorDark(int color){
double darkness = 1-(0.299*Color.red(color) + 0.587*Color.green(color) + 0.114*Color.blue(color))/255;
if(darkness<0.5){
return false; // It's a light color
}else{
return true; // It's a dark color
}
}
public float getLightness(int color) {
int red = Color.red(color);
int green = Color.green(color);
int blue = Color.blue(color);
float hsl[] = new float[3];
ColorUtils.RGBToHSL(red, green, blue, hsl);
return hsl[2];
}
Si potrebbe facilmente utilizzare i ColorUtils per controllare la leggerezza di un colore.
if (getLightness(color) < 0.5f){
// This color is too dark!
}
verde e giallo sono entrambi leggeri per questo ... –
Un'altra soluzione:
int finale private static BRIGHTNESS_THRESHOLD = 130;
/**
* Calculate whether a color is light or dark, based on a commonly known
* brightness formula.
*
* @see {@literal http://en.wikipedia.org/wiki/HSV_color_space%23Lightness}
*/
public static boolean isColorDark(int color) {
return ((30 * Color.red(color) +
59 * Color.green(color) +
11 * Color.blue(color))/100) <= BRIGHTNESS_THRESHOLD;
}
Se si utilizza il supporto biblioteca v4, è possibile utilizzare ColorUtils.calculateLuminance(color)
, che restituisce luminosità del colore come float tra 0.0
e 1.0
.
Così si può fare qualcosa di simile:
boolean isDark(int color) {
return ColorUtils.calculateLuminance(color) < 0.5;
}
Nota dal API Android 24 c'è anche il metodo: Color.luminance(color)
.
Grazie! goona prova al più presto e riferiscilo! – iGio90
il metodo sta funzionando bene! grazie molto! – iGio90
da dove hai preso questi numeri magici ?? (0,299, 0,587, 0,114)? –