我们习惯于看到以十六进制形式表示的颜色,例如 #RRGGBB 或 #AARRGGBB。但是,这些十六进制代码只是数字,您看到的是颜色值的十进制表示。
如果您在输出中使用Color.valueOf(),您应该能够以您期望的方式获得有关颜色的更多信息。对我来说,我想看?colorAccent的值,所以我写了这个:
val typedValue = TypedValue()
theme.resolveAttribute(R.attr.colorAccent, typedValue, true)
val color = Color.valueOf(typedValue.data)
println(color)
这是输出:
Color(0.84705883, 0.105882354, 0.3764706, 1.0, sRGB IEC61966-2.1)
这告诉我,我的颜色是 84.7% 红色、10.6% 绿色、37.6% 蓝色和 100% 不透明度。我也可以使用快速扩展的方法来获取十六进制值:
private fun Color.toHexString(): String =
String.format("#%08X", toArgb())
这给了我十六进制字符串#FFD81B60,它与我在颜色文件中看到的相匹配(尽管我指定它时没有使用 Alpha 通道)。
如果我用你的输出 (1637) 运行我的代码,我会得到:
Color(0.0, 0.023529412, 0.39607844, 0.0, sRGB IEC61966-2.1)
(#00000665)
这告诉我你的颜色是 0% 的红色、2.4% 的绿色和 39.6% 的蓝色......但它也是 0% 的不透明。这与您在着色器中使用此颜色时将其视为透明的事实相符。