Last active
January 30, 2023 00:04
-
-
Save alexfu/64dc37b3343b9dead0c4 to your computer and use it in GitHub Desktop.
Automatic text color selection using relative luminance.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Interesting. I guess this has sense in scenarios where the background color is dynamic.