Dispositivos XR relevantes
Estas orientações ajudam você a criar experiências para esses tipos de dispositivos XR.
O modificador onIndirectPointerGesture permite que o componente receba e responda
a eventos de ponteiro indireto de alto nível, como os que vêm do touchpad
de um dispositivo. Use esse modificador para capturar e processar gestos que vêm de um
touchpad ou de uma fonte semelhante.
Superfície da API
Há quatro callbacks que o app pode usar para controlar o processamento:
onClick: acionado em um toque ou clique bem-sucedido sem movimento horizontal significativo.onSwipeForward: acionado quando um deslize horizontal excede o limite de distância e velocidade na direção para frente.onSwipeBackward: acionado quando um deslize horizontal excede o limite de distância e velocidade na direção inversa.Enabled: quando definido comofalse, o modificador é ignorado e nenhum callback é invocado.
Comportamento do sistema para deslizar e rolar
O sistema usa um limite de toque para diferenciar um clique de um deslize.
- Se o ponteiro se mover significativamente durante um estado de pressionamento,
onClickserá cancelado. - Se o ponteiro voltar significativamente durante um movimento, o gesto de deslizar será invalidado.
Exemplo: configurar o processamento de deslizamentos e cliques em um componente
O código a seguir configura o processamento de deslizamentos e cliques em um Box focalizável:
@Composable fun OnIndirectPointerGestureSample() { var lastGesture by remember { mutableStateOf("None") } Box( modifier = Modifier.fillMaxSize() .onIndirectPointerGesture( enabled = true, onSwipeForward = { lastGesture = "Forward" }, onSwipeBackward = { lastGesture = "Backward" }, onClick = { lastGesture = "Click" }, ) .focusTarget(), contentAlignment = Alignment.Center, ) { Text("Last Gesture: $lastGesture") } }
Pontos principais sobre o código
- O
onIndirectPointerGesturerequer foco, então ofocusTargettambém é aplicado para tornar oBoxfocalizável. Você pode usarfocusTargetou outro modificador que permita o foco, comosurface. Sem foco, o modificador não pode atuar em eventos de ponteiro indireto. - Este exemplo implementa os callbacks
onSwipeForwardeonClick. Assim, os gestos de deslizar e clicar detectados são interceptados e consumidos, sem alcançar os contêineres pai. No entanto, você também pode deixar um callback específico nulo para transmitir um gesto para um modificadoronIndirectPointerGestureem um contêiner pai.