计算材料颜色

时间:2017-05-31 23:29:42

标签: android colors material-design

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

使用Google Material Design规范,如果您的工具栏/操作栏颜色为this pallete,那么从它下面两行的颜色应该是状态栏颜色(对于支持它的设备)。

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

因此我使用的颜色选择器采用上面颜色(#303F9F)形式的默认值,但颜色选择器返回整数形式的值。

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

基本上,我希望我的应用让用户选择原色,并自动生成更暗的补色。我尝试从第一种颜色中减去987670以获得第二种颜色,但它仅适用于我指定的颜色,而不适用于任何颜色。

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

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用以下方法获得较暗的原色:

/**
 * 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);