Intento crear una superficie que se pueda tocar en Jetpack Compose donde la elevación cambia cuando el usuario toca la superficie. El siguiente código ya funciona:
var tapped by remember { mutableStateOf(false) } val elevation by animateDpAsState( targetValue = if (tapped) 0.dp else 5.dp, animationSpec = tween(50) ) Surface( shape = RoundedCornerShape(20.dp), modifier = Modifier .padding(16.dp) .requiredSize(150.dp) .pointerInput(Unit) { detectTapGestures(onPress = { tapped = true tryAwaitRelease() tapped = false }) }, elevation = elevation ) { ... }Sin embargo, me gustaría tener un efecto dominó durante el toque. ¿Cómo podría lograr esto?
El botón/superficie predeterminado onClick y en el que se clickable no es adecuado porque solo maneja las entradas de presión pero no los toques.
Utiliza Modifier.indication para agregar un efecto dominó y pasa eventos con interactionSource para actualizar su estado de esta manera:
var tapped by remember { mutableStateOf(false) } val interactionSource = remember { MutableInteractionSource() } Surface( modifier = Modifier .indication(interactionSource, LocalIndication.current) .pointerInput(Unit) { detectTapGestures(onPress = { offset -> tapped = true val press = PressInteraction.Press(offset) interactionSource.emit(press) tryAwaitRelease() interactionSource.emit(PressInteraction.Release(press)) tapped = false }) } ) { }