Processar entradas indiretas de ponteiro no Jetpack Compose Glimmer

Dispositivos XR relevantes
Estas orientações ajudam você a criar experiências para esses tipos de dispositivos XR.
Óculos de áudio e
vídeo

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 como false, 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, onClick será 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

  • onIndirectPointerGesture requer foco. Portanto, o focusTarget também é aplicado para tornar o Box focalizável. Você pode usar focusTarget ou outro modificador de ativação de foco, como surface. Sem foco, o modificador não pode agir em eventos de ponteiro indiretos.
  • Este exemplo implementa os callbacks onSwipeForward e onClick. 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 modificador onIndirectPointerGesture em um contêiner pai. -