2017-05-31 101 views
0

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

对于Google Material Design规范,如果您在this pallete上的颜色为您的工具栏/操作栏颜色,则其下两行的颜色应为状态栏颜色(适用于支持该颜色的设备)。

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

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

对于彩色#3F51B5,它的等效整数值-12627531和 颜色#303F9F的等效整数值是-13615201。基本上,我希望我的应用程序让用户选择主要颜色,并使其自动生成较暗的补色。我尝试从第一种颜色中减去987670以获得第二种颜色,但它只适用于我指定的颜色,而不是任何颜色。

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

任何想法?

+0

[材质设计调色板](的可能的复制https://stackoverflow.com/问题/ 32942503 /材料设计彩色调色板) –

回答

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