计算材料颜色



我正在开发一个内置UI定制器的Android应用程序。UI 定制器允许用户在整个应用中更改不同的颜色,例如工具栏/操作栏颜色。

对于 Google Material Design 规范,如果此托盘上的颜色作为工具栏/操作栏颜色,则距离它两行的颜色应该是状态栏颜色(对于支持它的设备)。

例如,如果在"靛蓝"类别下选择颜色#3F51B5,则颜色#303F9F应为状态栏颜色。

所以我使用的颜色选择器采用上述颜色形式的默认值(#303F9F),但是,颜色选择器以整数形式返回一个值。

对于颜色#3F51B5,它的等效整数值是-12627531和 颜色#303F9F的等效整数值为-13615201

从本质上讲,我希望我的应用程序让用户选择主要颜色,并自动生成较深的补色。我尝试从第一种颜色中减去987670以获得第二种颜色,但它仅适用于我指定的颜色,不适用于任何颜色。

如何自动生成深两种色调的颜色?我不确定这是否需要考虑,但也许该方法还可以检测它是来自上面调色板链接的颜色还是只是随机颜色,如果它来自调色板,那么我可以硬编码所有值(不是真正想要的解决方案)和随机颜色可能只是使用一些伪代码来产生较暗的阴影。

有什么想法吗?

可以使用以下方法获取较深的原色:

/**
* Darkens a color by a given factor.
*
* @param color
*     the color to darken
* @param factor
*     The factor to darken the color.
* @return darker version of specified color.
*/
@ColorInt public static int darker(@ColorInt int color, @FloatRange(from = 0.0, to = 1.0) float factor) {
return Color.argb(Color.alpha(color), 
Math.max((int) (Color.red(color) * factor), 0),
Math.max((int) (Color.green(color) * factor), 0),
Math.max((int) (Color.blue(color) * factor), 0)
);
}

例:

int primaryDark = darker(primaryColor, 0.85f);

最新更新