O modificador onIndirectPointerGesture permite que o componente receba e responda
a eventos de ponteiro indiretos de alto nível, como aqueles originados do touchpad de um dispositivo. Use esse modificador para capturar e processar gestos que vêm de um touchpad ou fonte semelhante.
Superfície da API
Há quatro callbacks que seu 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 para trás.Enabled: quando definido comofalse, o modificador é ignorado e nenhum callback é invocado.
Comportamento do sistema para deslizar e rolar
O sistema usa um limite de folga de toque para diferenciar um clique de um deslize.
- Se o ponteiro se mover significativamente durante um estado inativo,
onClickserá cancelado. - Se o ponteiro voltar significativamente durante um movimento, o gesto de deslize será invalidado.
Exemplo: configurar o processamento de deslizes e cliques em um componente
O código a seguir configura o processamento de deslizes e cliques em uma Box focalizável:
@Composable @Sampled fun OnIndirectPointerGestureSample() { Box( modifier = Modifier.fillMaxSize() .onIndirectPointerGesture( enabled = true, onSwipeForward = { /* onSwipeForward */ }, onSwipeBackward = { /* onSwipeBackward */ }, onClick = { /* onClick */ }, ) .focusTarget() ) { // App() } }
Pontos principais sobre o código
onIndirectPointerGesturerequer foco. Portanto, ofocusTargettambém é aplicado para tornar oBoxfocalizável. Você pode usarfocusTargetou outro modificador de ativação de foco, comosurface. Sem foco, o modificador não pode agir em eventos de ponteiro indiretos.- Este exemplo implementa os callbacks
onSwipeForwardeonClick. Assim, os gestos de deslize e clique detectados são interceptados e consumidos, e não alcançam contêineres pai. No entanto, também é possível deixar um callback específico nulo para transmitir um gesto a um modificadoronIndirectPointerGestureem um contêiner pai. -