这里有我的代码,它只显示一个简单的调色板:
@Composable
fun ColorPicker(modifier: Modifier = Modifier) {
Box(
modifier = modifier
.fillMaxSize()
.background(Brush.horizontalGradient(colors()))
) {
}
}
fun colors(n: Int = 359): List<Color> {
val cols = mutableListOf<Color>()
for (i in 0 until n) {
val color = java.awt.Color.getHSBColor(i.toFloat() / n.toFloat(), 0.85f, 1.0f)
cols.add(Color(color.red, color.green, color.blue, color.alpha))
}
return cols
}
这看起来很不错,正如我在这里看到的: Click here
但现在我想在用户点击调色板时获得 RGB 值。我该怎么做? (这是 Jetpack Compose 桌面,但它应该与 Android 上的相同)
答案 0 :(得分:0)
您可以改为为每种颜色创建宽度非常小的 Card
并从它们的 onClick
修改状态持有者
例如
var rgb by mutableStateOf ("") // displays RGB values
Text(rgb)
Layout( content = {
for (i in 0 until 359) {
val color =
java.awt.Color.getHSBColor(i.toFloat() / n.toFloat(), 0.85f, 1.0f)
Card(
Modifier.background(Color(
color.red,
color.green,
color.blue,
color.alpha
)
),
onClick = { rgb = color. // Assign appropriate value
}
}
){measurables, constraints ->
val placeables = measurables.map{
it.measure(constraints.maxWidth/measurables.size, constraints.maxHeight)
}
int x = 0
layout(constraints.maxWidth, constraints.maxHeight){
placeables.forEach{
it.placeRelative(x, 0)
x+=it.width
}
}
}
这将平均分配宽度