iGi*_*o90 46 android background colors
根据标题,我的问题是:Android是否提供任何方式来分析/确定颜色(显然是动态的)是亮还是暗?
adb*_*oco 92
Android没有提供它,你可以实现一个方法来确定这一点.这是一种方法:
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
}
}
Run Code Online (Sandbox Code Playgroud)
Rob*_*yer 54
如果使用支持库v4,则可以使用ColorUtils.calculateLuminance(color),它将颜色的亮度返回为0.0和之间的浮点数1.0.
所以你可以这样做:
boolean isDark(int color) {
return ColorUtils.calculateLuminance(color) < 0.5;
}
Run Code Online (Sandbox Code Playgroud)
请参阅:https://developer.android.com/reference/android/support/v4/graphics/ColorUtils.html#calculateLuminance(int)
请注意,自Android API 24以来,还有方法:Color.luminance(color).
kro*_*kin 12
如果有人想知道背景颜色是浅色还是深色,以确定在其上面绘制的文本使用什么颜色(白色或黑色)\xe2\x80\x93 计算亮度不会为您提供正确的值所有案件。
\n\n假设您有背景颜色:#7f6fad。\n如果您检查其亮度(通过ColorUtils#calculateLuminance),您将得到:0.1889803503770053,它位于下面0.5,因此按照该逻辑应被视为黑暗。
但如果您遵循WCAG,您会发现一般文本对比度应至少为 4.5:1。
\n\nColorUtils 的方法calculateContrast将给出以下结果:
4.3936666690109224.779607007540106人们可以看到白色文本提供的对比度不够,而黑色则很好。\n因此,如果您想检查在某种通用背景颜色之上绘制什么颜色,最好检查对比度:
\n\n@ColorInt\nfun getContrastColor(@ColorInt color: Int): Int {\n val whiteContrast = ColorUtils.calculateContrast(Color.WHITE, color)\n val blackContrast = ColorUtils.calculateContrast(Color.BLACK, color)\n\n return if (whiteContrast > blackContrast) Color.WHITE else Color.BLACK\n}\nRun Code Online (Sandbox Code Playgroud)\n
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];
}
Run Code Online (Sandbox Code Playgroud)
可以轻松地使用ColorUtils检查颜色的亮度。
if (getLightness(color) < 0.5f ){
// This color is too dark!
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12619 次 |
| 最近记录: |