0

我在这里有我的代码,它只显示一个简单的调色板:

@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
}

这看起来很不错:

点击这里

但是现在如果用户单击调色板,我想获取 RGB 值。我该怎么做?(这是 Jetpack Compose Desktop,但应该和 Android 上的一样)

4

1 回答 1

0

您可以改为Card为每种颜色创建宽度非常小的 s 并从它们onClick的 s修改状态持有者

例如,

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
}
}
}

这会平均分配宽度

于 2021-07-07T19:47:48.007 回答