studio - Comprueba si el color es oscuro o claro en Android
paleta de colores android studio (4)
según el título, mi pregunta es: ¿proporciona Android alguna forma de analizar / determinar si un color (que obviamente será dinámico para ese propósito) es claro u oscuro?
Android no lo proporciona, puede implementar un método para determinar esto. Aquí un método para hacer eso:
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
}
}
Otra solución:
private static final int 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;
}
Si usa la biblioteca de soporte v4, puede usar ColorUtils.calculateLuminance(color)
, que devuelve la luminancia del color como flotante entre 0.0
y 1.0
.
Entonces puedes hacer algo como:
boolean isDark(int color) {
return ColorUtils.calculateLuminance(color) < 0.5;
}
Tenga en cuenta que desde Android API 24 también hay un método: Color.luminance(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];
}
Uno podría usar fácilmente ColorUtils para verificar la claridad de un color.
if (getLightness(color) < 0.5f ){
// This color is too dark!
}