【问题标题】:Calculating Material Colors计算材料颜色
【发布时间】:2017-05-31 23:29:41
【问题描述】:

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

根据 Google Material Design 规范,如果您在 this pallete 上有一个颜色作为您的工具栏/操作栏颜色,那么从它向下两行的颜色应该是状态栏颜色(对于支持它的设备)。

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

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

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

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

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

有什么想法吗?

【问题讨论】:

标签: android colors material-design


【解决方案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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-28
    • 2015-08-15
    • 2015-08-13
    • 2020-01-15
    • 2016-12-02
    • 2014-10-12
    • 1970-01-01
    • 2018-05-09
    相关资源
    最近更新 更多