Adicionar retorno tátil a eventos

Um dos casos de uso mais básicos do retorno tátil é fornecer feedback ao usuário e interações. Seletores de horário, pressionamento de tecla em um teclado virtual e texto seleção são exemplos comuns de bons casos de uso para retorno tátil. Para mais informações sobre quando e como aplicar o retorno tátil, leia Princípios de design tátil.

Esta página descreve três maneiras de usar o retorno tátil.

Esses métodos usam primitivos definidos no nível do dispositivo para oferecer alta qualidade feedback personalizado para cada dispositivo.

Todos os métodos de retorno tátil respeitam as configurações de feedback de toque do usuário padrão.

Usar componentes View para gerar retorno tátil

Use o método View.performHapticFeedback para gerar retorno tátil. A constantes táteis definidas por HapticFeedbackConstants são focadas na em um aplicativo, não o tipo de efeito tátil realizado.

A implementação pode variar dependendo do dispositivo e do hardware mas o app só precisa considerar o tipo de feedback a ser fornecido em um contexto específico. Ao focar na funcionalidade, você pode ativar o retorno tátil feedback para interações semelhantes. Os usuários aprendem a associar diferentes significados diferentes sensações táteis ao longo do tempo.

Pré-requisitos: ativar o retorno tátil

Desde que o View esteja visível, o retorno tátil poderá ser usado para os eventos dele. Alguns eventos, como tocar e manter pressionado, têm retorno tátil padrão que é acionado se um um listener na visualização processa o evento (retorna true).

Um View do Android pode desativar o retorno tátil definindo a a propriedade View.hapticFeedbackEnabled como false. Desativar esta propriedade resulta em feedback padrão.

O método performHapticFeedback também respeita a configuração do sistema HAPTIC_FEEDBACK_ENABLED, que permite que o usuário os desative. de todo o sistema.

Diferente de outras APIs táteis, usar HapticFeedbackConstants com um View não requer a permissão VIBRATE.

Escolha um HapticFeedbackConstant

Ao usar componentes View com HapticFeedbackConstants, não é necessário para avaliar o suporte de dispositivos específicos, pois essas constantes terão o comportamento deles, se necessário. A única consideração é o nível do SDK dos recursos constante.

Exemplo 1: pressionamento de tecla

Este é um exemplo de como adicionar um retorno tátil a uma entrada por toque no View usando listeners de toque. Os efeitos simulam a sensação de pressionar um e soltando-o.

Kotlin

class HapticTouchListener : View.OnTouchListener {
  override fun onTouch(View view, MotionEvent event) : Boolean {
    when (event.actionMasked) {
      MotionEvent.ACTION_DOWN ->
        view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY)
      MotionEvent.ACTION_UP ->
        view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY_RELEASE)
    }
    return true
  }
}

Java

class HapticTouchListener implements View.OnTouchListener {
  @Override
  public boolean onTouch(View view, MotionEvent event) {
    switch (event.getAction()) {
      case MotionEvent.ACTION_DOWN:
        view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
        break;
      case MotionEvent.ACTION_UP:
        view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY_RELEASE);
        break;
    }
    return true;
  }
}

Exemplo 2: botão "Enviar"

Os casos de uso do retorno tátil vão além de simular uma interação física com o dispositivo. Eles também podem ser usados para transmitir um significado abstrato. Por exemplo: a expectativa geral O efeito CONFIRM é um vibrações curtas e leves enquanto uma REJECT pode ser um feedback mais forte para sinalizar falhas. Isso é ilustrado no exemplo para um botão de envio de feedback.

Kotlin

submitButton.setOnClickListener { view ->
  val successful = performSubmit()
  if (successful) {
    view.performHapticFeedback(HapticFeedbackConstants.CONFIRM)
  } else {
    view.performHapticFeedback(HapticFeedbackConstants.REJECT)
  }
}

Java

submitButton.setOnClickListener(view -> {
  boolean successful = performSubmit();
  if (successful) {
    view.performHapticFeedback(HapticFeedbackConstants.CONFIRM);
  } else {
    view.performHapticFeedback(HapticFeedbackConstants.REJECT);
  }
});

Usar um VibrationEffect predefinido para gerar retorno tátil

O uso da abordagem baseada em View tem como foco a interação do usuário. É mais consistentes para todo o sistema. No entanto, regras predefinidas específicas As APIs VibrationEffect também podem ser invocadas para oferecer retorno tátil personalizado. efeitos

Os efeitos predefinidos estão disponíveis como VibrationEffect constantes e podem ser verificou a existência de suporte e foi usado com o serviço Vibrator, como mostrado no exemplos a seguir.

Entenda o suporte do dispositivo para APIs VibrationEffect

No uso básico, não deve haver necessidade de verificar o suporte de indivíduos APIs do VibrationEffect. As APIs, como Vibrator.areEffectsSupported e Vibrator.areAllEffectsSupported são usados para determinar se o dispositivo uma implementação personalizada da constante. Se um efeito personalizado não for seu app ainda poderá reproduzir os efeitos e usar uma linguagem de definição implementação substituta.

Para mais detalhes, consulte Predefinidos VibrationEffect.

Pré-requisitos: carregar a permissão "Vibrator" e "VIBRATE"

A maioria das vibrações pode ser reproduzida com o serviço Vibrator, que pode ser carregado da seguinte forma:

Kotlin

import android.os.Vibrator

val vibrator = context.getSystemService(Vibrator::class.java)

Java

import android.os.Vibrator;

Vibrator vibrator = context.getSystemService(Vibrator.class);

O app precisa ter permissão VIBRATE para para vibrar o dispositivo que está usando este serviço. A permissão pode ser adicionada ao arquivo de manifesto do aplicativo:

<uses-permission android:name="android.permission.VIBRATE"/>

Tocar um VibrationEffect predefinido

Efeitos predefinidos podem ser preparados usando VibrationEffect.createPredefined, Depois, ele é reproduzido usando um dos métodos vibrate em Vibrator.

Este exemplo tem um efeito de clique.

Kotlin

val vibrator = context.getSystemService(Vibrator::class.java)
...
// Requires VIBRATE permission
vibrator.vibrate(VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK))

Java

Vibrator vibrator = context.getSystemService(Vibrator.class);
...
// Requires VIBRATE permission
vibrator.vibrate(VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK));

Usar composições avançadas com primitivos

A API VibrationEffect.Composition oferece mais possibilidades para retorno tátil. No entanto, ao contrário dos efeitos, esses primitivos não têm substitutos no nível do sistema, o que significa que é necessária muita atenção os primitivos e outros recursos suportados pelo dispositivo.

O uso dessas APIs é discutido com mais detalhes em Como criar efeitos táteis personalizados.