public static int manipulateColor(int color, float factor) {
int a = Color.alpha(color);
int r = Math.round(Color.red(color) * factor);
int g = Math.round(Color.green(color) * factor);
int b = Math.round(Color.blue(color) * factor);
return Color.argb(a,
Math.min(r,255),
Math.min(g,255),
Math.min(b,255));
}
8条答案
按热度按时间dvtswwa31#
一种更像Android的方式:
您需要使用小于
1.0f
的因子来变暗。请尝试0.8f
。eyh26e7m2#
甚至还有一个之前没有提到过的更简单的解决方案,Android有一个名为
ColorUtils
的类,这是一个扩展函数的Kotlin片段,可以帮助您解决这个问题ColorUtils.blendARGB
方法把你的颜色作为第一个参数,第二个是你想要混合的颜色,在这里是black
,最后一个参数是你的颜色和你要混合的黑色的比例.oprakyz73#
一个更简单的解决方案使用HSV像RogueBaneling建议:
不需要复杂的按位运算或
Math
。如果需要,请将0.8f
移到参数。bwitn5fc4#
如果你想更简单和不准确,下面可能会帮助你。
1sbrub3j5#
使用ColorUtils.blendARGB的最佳方法
较暗:
打火机:
g9icjywg6#
将颜色转换为HSV阵列,然后将亮度降低20%,然后使用
HSVToColor
将HSV阵列转换回RGB。您希望在数组中更改的值将是V
值。(即hsv[2]
)lbsnaicq7#
这样你可以选择颜色的百分比,从而获取一个阴影更深或阴影更轻
colorlighter为按钮的背景提供一个较浅的颜色阴影colorderdark为按钮的背景提供一个较深的颜色阴影
mlnl4t2r8#
基于@Rasoul Miri的答案,你可以用一种更加 kotlinic 的方式为你的主颜色类创建扩展。例如,如果使用Android中
androidx.compose.ui.graphics.Color
包中的颜色类,你可以用这种方式为它添加一些扩展:这是一个非常小的函数,只需执行以下操作即可使用