按下组合表面时更改 alpha(可单击修改器)

Bri*_*ner 7 android android-jetpack-compose

我正在使用clickable修改器Surface并希望创建一个自定义指示,以使表面(及其内容)在按下时显示 0.5 alpha。但似乎该指示只能用于绘制额外的 UI。

Surface按下时如何以 0.5 alpha 重新绘制?

Surface(
   modifier = Modifier.clickable(interactionSource = remember { MutableInteractionSource() }, indication = CustomIndication, onClick = onClick)
    ) {

    ...

}
Run Code Online (Sandbox Code Playgroud)

Gab*_*tti 8

Indication您可以在修饰符中指定参数clickablerememberRipple您可以使用通过更改颜色定义的默认波纹。

就像是:

var interactionSource = remember { MutableInteractionSource() }

//clickable modifier
val clickable = Modifier.clickable(
    interactionSource = interactionSource,
    indication = rememberRipple(color = /* use you custom color */
       MaterialTheme.colors.primary.copy(alpha = 0.5f))
) { /* update some business state here */ }


Surface(modifier = clickable){
     //...
}
Run Code Online (Sandbox Code Playgroud)

否则你可以使用类似的东西:

val interactionSource = remember { MutableInteractionSource() }
val isPressed by interactionSource.collectIsPressedAsState()
val backgroundAlpha = if (isPressed) 0.5f else 1f

Surface(
    modifier = Modifier.clickable(true){},
    color= MaterialTheme.colors.secondary.copy(alpha = backgroundAlpha)
) {
   //....
}
Run Code Online (Sandbox Code Playgroud)