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); | |
} |
It seems foolish question but can you pls eloborate.
1 R.color.primary_text_holo_light & R.color.primary_text_holo_dark will remain static ?
2 In myColor variable we need to pass int type color but is it from res directory ?
3 Is there any relation between R.color.primary_text_holo_light, R.color.primary_text_holo_dark & myColor ?
An example will be helpful for more understanding :)
Interesting. I guess this has sense in scenarios where the background color is dynamic.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
You can also write a Utility function to do this or a CustomTextView that automatically change its color based on relativeLuminance. That would be cool.