Automatic text color selection using relative luminance.
Resources res = getResources();
int light = res.getColorStateList(R.color.primary_text_holo_light);
int dark = res.getColorStateList(R.color.primary_text_holo_dark);
double luminance = ColorUtils.calculateRelativeLuminance(myColor)/255.0;
if (luminance > 0.60) {
ribbon.setTextColor(light);
} else {
ribbon.setTextColor(dark);
}
public class ColorUtils {
private static final double LM_RED_COEFFICIENT = 0.2126;
private static final double LM_GREEN_COEFFICIENT = 0.7152;
private static final double LM_BLUE_COEFFICIENT = 0.0722;
public static int calculateRelativeLuminance(int color) {
int red = (int) (Color.red(color) * LM_RED_COEFFICIENT);
int green = (int) (Color.green(color) * LM_GREEN_COEFFICIENT);
int blue = (int) (Color.blue(color) * LM_BLUE_COEFFICIENT);
return red + green + blue;
}
}