首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算材料颜色

计算材料颜色
EN

Stack Overflow用户
提问于 2017-05-31 23:29:41
回答 1查看 572关注 0票数 0

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

使用Google规范,如果这个托盘上有一个颜色作为工具栏/ actionbar颜色,那么从它下面两行的颜色应该是状态栏颜色(对于支持它的设备)。

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

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

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

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

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

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-01 02:01:21

您可以使用以下方法获得更深的主颜色:

代码语言:javascript
复制
/**
 * 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)
  );
}

示例:

代码语言:javascript
复制
int primaryDark = darker(primaryColor, 0.85f);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44296207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档