如何获取屏幕上的 rgb 值

时间:2021-07-07 18:36:18

标签: kotlin android-jetpack-compose

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

@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 上的相同)

1 个答案:

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

这将平均分配宽度