Dodawanie reakcji haptycznych do wydarzeń

Jednym z najprostszych zastosowań haptyki jest udzielanie użytkownikom informacji zwrotnych na temat ich interakcji. Wybór czasu, naciśnięcie klawisza na klawiaturze wirtualnej i wybór tekstu to typowe przykłady dobrych zastosowań sprzężenia zwrotnego haptycznego. Więcej informacji o tym, kiedy i jak stosować haptyczną odpowiedź, znajdziesz w artykule Zasady projektowania haptycznych odpowiedzi.

Na tej stronie opisaliśmy 3 sposoby na zapewnienie informacji zwrotnej haptycznej.

Te metody korzystają z elementów zdefiniowanych na poziomie urządzenia, aby zapewnić wysokiej jakości informacje zwrotne dostosowane do danego urządzenia.

Domyślnie wszystkie metody haptycznych informacji zwrotnych respektują ustawienia użytkownika dotyczące informacji zwrotnych dotykowych.

Używanie komponentów View do generowania reakcji na dotyk

Aby wygenerować reakcję na dotyk, użyj metody View.performHapticFeedback. Konstante haptyczne zdefiniowane przez HapticFeedbackConstants skupiają się na ich funkcjonalności w aplikacji, a nie na typie efektu haptycznego.

Implementacja może się różnić w zależności od urządzenia i możliwości sprzętowych, ale aplikacja musi wziąć pod uwagę tylko typ informacji zwrotnych, które ma wyświetlić w danym kontekście. Jeśli skupisz się na funkcjonalności, możesz włączyć haptyczne informacje zwrotne w przypadku podobnych interakcji. Z czasem użytkownicy uczą się kojarzyć różne znaczenia z różnymi odczuciami haptycznymi.

Wstępujące: włącz reakcję haptyczną

Dopóki widoczny jest element View, można używać reakcji haptycznej w przypadku jego zdarzeń. Niektóre zdarzenia, takie jak długie naciśnięcie, mają domyślne haptyczne reakcje, które są wywoływane, jeśli odbiorca w widoku obsługuje zdarzenie (zwraca true).

Urządzenie z Androidem View może wyłączyć reakcję haptyczną, ustawiając wartość właściwości View.hapticFeedbackEnabled na false. Wyłączenie tej usługi spowoduje wyświetlenie domyślnej opinii.

Metoda performHapticFeedback uwzględnia też ustawienie systemu HAPTIC_FEEDBACK_ENABLED, które pozwala użytkownikowi wyłączyć je dla całego systemu.

W przeciwieństwie do innych interfejsów API obsługujących haptyczne informacje zwrotne korzystanie z HapticFeedbackConstants w połączeniu z View nie wymaga uprawnienia VIBRATE.

Wybierz HapticFeedbackConstant

Podczas korzystania z komponentów View z komponentami HapticFeedbackConstants nie trzeba sprawdzać obsługi konkretnych urządzeń, ponieważ w razie potrzeby te stałe będą miały zachowanie zastępcze. Jedynym czynnikiem, który należy wziąć pod uwagę, jest poziom pakietu SDK stałej.

Przykład 1. Naciśnięcie klawisza

Oto przykład dodawania informacji zwrotnej haptycznej do dotykowego wprowadzania danych w View za pomocą odbiorników dotykowych. Efekty symulują uczucie naciśnięcia i zwolnienia przycisku.

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;
  }
}

Przykład 2. Przycisk Prześlij

Przypadki użycia wibracji wykraczają poza symulowanie fizycznej interakcji z urządzeniem. Mogą one też służyć do przekazywania abstrakcyjnego znaczenia. Na przykład ogólne oczekiwania dotyczące efektu CONFIRM to krótka i delikatna wibracja, podczas gdy REJECT może być silniejszym sygnałem oznaczającym awarię. Przykład takiego przycisku przesyłania przedstawiamy poniżej.

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);
  }
});

Używanie wstępnie zdefiniowanego VibrationEffect do generowania reakcji na dotyk

Korzystanie z metody opartej na View skupia się na interakcji z użytkownikiem. Jest to preferowane rozwiązanie ze względu na spójność w całym systemie. Można jednak wywoływać określone wstępnie zdefiniowane interfejsy API VibrationEffect, aby dostosować efekty haptyczne.

Zdefiniowane wstępnie efekty są dostępne jako stałe VibrationEffect. Można sprawdzić, czy są obsługiwane, i odtworzyć je za pomocą usługi Vibrator, jak pokazano w poniższych przykładach.

Informacje o obsługiwanych urządzeniach w przypadku interfejsów API VibrationEffect

W przypadku podstawowego użycia nie trzeba sprawdzać, czy poszczególne interfejsy API VibrationEffect są obsługiwane. Interfejsy API takie jak Vibrator.areEffectsSupportedVibrator.areAllEffectsSupported są używane do określenia, czy urządzenie ma spersonalizowaną implementację stałej. Jeśli nie ma efektu niestandardowego, aplikacja może nadal odtwarzać efekty i używać implementacji zapasowej zdefiniowanej przez platformę.

Więcej informacji znajdziesz w sekcji Wstępnie zdefiniowaneVibrationEffect.

Wymagania wstępne: załaduj wibrator i uprawnienia VIBRATE

Większość wibracji można odtworzyć za pomocą usługi Vibrator, którą można załadować w ten sposób:

Kotlin

import android.os.Vibrator

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

Java

import android.os.Vibrator;

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

Aby korzystać z tej usługi, aplikacja musi mieć uprawnienie VIBRATE. Uprawnienia można dodać do pliku manifestu aplikacji:

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

Odtwarzanie zdefiniowanego wstępnie VibrationEffect

Zdefiniowane wstępnie efekty można przygotować za pomocą VibrationEffect.createPredefined, a następnie odtworzyć za pomocą jednej z metod vibrate w Vibrator.

W tym przykładzie odtwarzany jest efekt kliknięcia.

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));

Zaawansowane kompozycje z prostymi obiektami

Interfejs API VibrationEffect.Composition oferuje dodatkowe możliwości interakcji haptycznej. Jednak w przeciwieństwie do efektów te prymity nie mają zastępników na poziomie systemu, co oznacza, że należy zwrócić szczególną uwagę na prymity i inne funkcje obsługiwane przez urządzenie.

Korzystanie z tych interfejsów API omówiono szczegółowo w artykule Tworzenie niestandardowych efektów haptycznych.