alexfu
6/9/2014 - 6:30 PM

Automatic text color selection using relative luminance.

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;
  }
}