我得到的颜色使用列CALENDAR_COLOR作为int,但颜色是不同的,然后真实的一个显示在日历中。事实上,它的颜色很相似,但要浅得多!为什么会这样?谢谢
CALENDAR_COLOR
int
brc7rcf01#
Google日历应用程序会对颜色进行转换。它使用硬编码的Map来搜索颜色对应关系。如果在Map上找不到颜色,则会应用手动转换。这是代码的简化(但功能)版本:
public final class CalendarUtils {private static final Map<Integer, Integer> sUpdatedColors;static { Map hashMap = new HashMap(); sUpdatedColors = hashMap; hashMap.put(-509406, -2818048); sUpdatedColors.put(-370884, -765666); sUpdatedColors.put(-35529, -1086464); sUpdatedColors.put(-21178, -1010944); sUpdatedColors.put(-339611, -606426); sUpdatedColors.put(-267901, -1784767); sUpdatedColors.put(-4989844, -4142541); sUpdatedColors.put(-8662712, -8604862); sUpdatedColors.put(-15292571, -16023485); sUpdatedColors.put(-12396910, -16738680); sUpdatedColors.put(-7151168, -13388167); sUpdatedColors.put(-6299161, -16540699); sUpdatedColors.put(-6306073, -12417548); sUpdatedColors.put(-11958553, -12627531); sUpdatedColors.put(-6644481, -8812853); sUpdatedColors.put(-4613377, -5005861); sUpdatedColors.put(-5997854, -6395473); sUpdatedColors.put(-3312410, -7461718); sUpdatedColors.put(-3365204, -5434281); sUpdatedColors.put(-618062, -2614432); sUpdatedColors.put(-3118236, -1672077); sUpdatedColors.put(-5475746, -8825528); sUpdatedColors.put(-4013374, -10395295); sUpdatedColors.put(-3490369, -5792882); sUpdatedColors.put(-2350809, -2818048); sUpdatedColors.put(-18312, -765666); sUpdatedColors.put(-272549, -606426); sUpdatedColors.put(-11421879, -16023485); sUpdatedColors.put(-8722497, -13388167); sUpdatedColors.put(-12134693, -16540699); sUpdatedColors.put(-11238163, -12627531); sUpdatedColors.put(-5980676, -8812853); sUpdatedColors.put(-2380289, -7461718); sUpdatedColors.put(-30596, -1672077); sUpdatedColors.put(-1973791, -10395295); sUpdatedColors.put(-2883584, -2818048); sUpdatedColors.put(-831459, -765666); sUpdatedColors.put(-1152256, -1086464); sUpdatedColors.put(-1076736, -1010944); sUpdatedColors.put(-672219, -606426); sUpdatedColors.put(-1914036, -1784767); sUpdatedColors.put(-4208334, -4142541); sUpdatedColors.put(-8670655, -8604862); sUpdatedColors.put(-16089278, -16023485); sUpdatedColors.put(-16738937, -16738680); sUpdatedColors.put(-16606492, -16540699); sUpdatedColors.put(-12483341, -12417548); sUpdatedColors.put(-12624727, -12627531); sUpdatedColors.put(-8878646, -8812853); sUpdatedColors.put(-5071654, -5005861); sUpdatedColors.put(-7527511, -7461718); sUpdatedColors.put(-5500074, -5434281); sUpdatedColors.put(-2680225, -2614432); sUpdatedColors.put(-1737870, -1672077); sUpdatedColors.put(-8891321, -8825528); sUpdatedColors.put(-10263709, -10395295);}public static int getDisplayColor(int color) { if (sUpdatedColors.containsKey(color)) { return (sUpdatedColors.get(color)); } if (sUpdatedColors.containsValue(color)) { return color; } float[] fArr = new float[3]; Color.colorToHSV(color, fArr); if (fArr[2] > 0.79f) { fArr[1] = Math.min(fArr[1] * 1.3f, 1.0f); fArr[2] = fArr[2] * 0.8f; } return Color.HSVToColor(Color.alpha(color), fArr);}}
public final class CalendarUtils {
private static final Map<Integer, Integer> sUpdatedColors;
static {
Map hashMap = new HashMap();
sUpdatedColors = hashMap;
hashMap.put(-509406, -2818048);
sUpdatedColors.put(-370884, -765666);
sUpdatedColors.put(-35529, -1086464);
sUpdatedColors.put(-21178, -1010944);
sUpdatedColors.put(-339611, -606426);
sUpdatedColors.put(-267901, -1784767);
sUpdatedColors.put(-4989844, -4142541);
sUpdatedColors.put(-8662712, -8604862);
sUpdatedColors.put(-15292571, -16023485);
sUpdatedColors.put(-12396910, -16738680);
sUpdatedColors.put(-7151168, -13388167);
sUpdatedColors.put(-6299161, -16540699);
sUpdatedColors.put(-6306073, -12417548);
sUpdatedColors.put(-11958553, -12627531);
sUpdatedColors.put(-6644481, -8812853);
sUpdatedColors.put(-4613377, -5005861);
sUpdatedColors.put(-5997854, -6395473);
sUpdatedColors.put(-3312410, -7461718);
sUpdatedColors.put(-3365204, -5434281);
sUpdatedColors.put(-618062, -2614432);
sUpdatedColors.put(-3118236, -1672077);
sUpdatedColors.put(-5475746, -8825528);
sUpdatedColors.put(-4013374, -10395295);
sUpdatedColors.put(-3490369, -5792882);
sUpdatedColors.put(-2350809, -2818048);
sUpdatedColors.put(-18312, -765666);
sUpdatedColors.put(-272549, -606426);
sUpdatedColors.put(-11421879, -16023485);
sUpdatedColors.put(-8722497, -13388167);
sUpdatedColors.put(-12134693, -16540699);
sUpdatedColors.put(-11238163, -12627531);
sUpdatedColors.put(-5980676, -8812853);
sUpdatedColors.put(-2380289, -7461718);
sUpdatedColors.put(-30596, -1672077);
sUpdatedColors.put(-1973791, -10395295);
sUpdatedColors.put(-2883584, -2818048);
sUpdatedColors.put(-831459, -765666);
sUpdatedColors.put(-1152256, -1086464);
sUpdatedColors.put(-1076736, -1010944);
sUpdatedColors.put(-672219, -606426);
sUpdatedColors.put(-1914036, -1784767);
sUpdatedColors.put(-4208334, -4142541);
sUpdatedColors.put(-8670655, -8604862);
sUpdatedColors.put(-16089278, -16023485);
sUpdatedColors.put(-16738937, -16738680);
sUpdatedColors.put(-16606492, -16540699);
sUpdatedColors.put(-12483341, -12417548);
sUpdatedColors.put(-12624727, -12627531);
sUpdatedColors.put(-8878646, -8812853);
sUpdatedColors.put(-5071654, -5005861);
sUpdatedColors.put(-7527511, -7461718);
sUpdatedColors.put(-5500074, -5434281);
sUpdatedColors.put(-2680225, -2614432);
sUpdatedColors.put(-1737870, -1672077);
sUpdatedColors.put(-8891321, -8825528);
sUpdatedColors.put(-10263709, -10395295);
}
public static int getDisplayColor(int color) {
if (sUpdatedColors.containsKey(color)) {
return (sUpdatedColors.get(color));
if (sUpdatedColors.containsValue(color)) {
return color;
float[] fArr = new float[3];
Color.colorToHSV(color, fArr);
if (fArr[2] > 0.79f) {
fArr[1] = Math.min(fArr[1] * 1.3f, 1.0f);
fArr[2] = fArr[2] * 0.8f;
return Color.HSVToColor(Color.alpha(color), fArr);
字符串要获得转换后的颜色,您可以使用Calendar Provider返回的颜色调用getDisplayColor(color)方法(由于Calendar Provider返回字符串,因此我们需要在之前将其解析为整数):
int calendarColor = Integer.parseInt(colorStringFromCalendarProvider);int transformedColor = CalendarUtils.getDisplayColor(calendarColor);
int calendarColor = Integer.parseInt(colorStringFromCalendarProvider);
int transformedColor = CalendarUtils.getDisplayColor(calendarColor);
型
9gm1akwq2#
初始化变量
private View mView;
字符串
视图绑定变量
mView = (View) findViewById(R.id.mView);
日历内容提供程序会返回颜色代码,需要编写代码获取日历颜色代码
String calendarColorCode = "-5997854";
转换int颜色
int mColorCode = (0xff000000 + Integer.parseInt(calendarColorCode));
在视图中应用背景颜色代码
viewColorCode.setBackgroundColor(mColorCode);
搞定
os8fio9y3#
你也可以使用字符串,只要它是一个ARGB有效的代码,如"0xFF005500"。ARGB代表阿尔法/红色/绿色/蓝色,知道这一点,你可以很容易地转换一个十六进制(这是RGB)代码,如#FF8866到ARGB 0xFFFF 8866。在给定的示例中,红色代码将为FF,绿色代码将为88,蓝色代码将为66。默认情况下,这将是一种不透明的颜色,因此将FF指定为alpha,从而导致ARGB代码为0xFFFF 8866。
"0xFF005500"
ohfgkhjo4#
确实是一个非常好的贡献,因为这个转换在android文档中根本没有涉及。我不会在google源代码中找到解决方案。非常感谢。程序示例运行良好,只是一个简单的代码改进:
static final Map<Integer, Integer> sUpdatedColors = new HashMap<>();static { sUpdatedColors.put(-509406, -2818048); sUpdatedColors.put(-370884, -765666);...
static final Map<Integer, Integer>
sUpdatedColors = new HashMap<>();
sUpdatedColors.put(-509406, -2818048);
...
4条答案
按热度按时间brc7rcf01#
Google日历应用程序会对颜色进行转换。它使用硬编码的Map来搜索颜色对应关系。如果在Map上找不到颜色,则会应用手动转换。
这是代码的简化(但功能)版本:
字符串
要获得转换后的颜色,您可以使用Calendar Provider返回的颜色调用getDisplayColor(color)方法(由于Calendar Provider返回字符串,因此我们需要在之前将其解析为整数):
型
9gm1akwq2#
初始化变量
字符串
视图绑定变量
型
日历内容提供程序会返回颜色代码,需要编写代码获取日历颜色代码
型
转换int颜色
型
在视图中应用背景颜色代码
型
搞定
os8fio9y3#
你也可以使用字符串,只要它是一个ARGB有效的代码,如
"0xFF005500"
。ARGB代表阿尔法/红色/绿色/蓝色,知道这一点,你可以很容易地转换一个十六进制(这是RGB)代码,如#FF8866到ARGB 0xFFFF 8866。
在给定的示例中,红色代码将为FF,绿色代码将为88,蓝色代码将为66。默认情况下,这将是一种不透明的颜色,因此将FF指定为alpha,从而导致ARGB代码为0xFFFF 8866。
ohfgkhjo4#
确实是一个非常好的贡献,因为这个转换在android文档中根本没有涉及。我不会在google源代码中找到解决方案。非常感谢。
程序示例运行良好,只是一个简单的代码改进:
字符串