Podstawy UX dla platformy haptycznej

Wszystkie ulepszenia platformy Androida oparte na czujnikach haptycznych są spowodowane zbiorem zasad UX, które ewoluują w równym tempie. Aktualna zasady obejmują zastąpienie głośnych wibracji wyraźnymi czujnikami haptycznymi. dzięki bogatym czujnikom haptycznym.

Zasady dotyczące UX

Rysunek 1. Obecne zasady

W poniższej tabeli znajdziesz wszystkie dostępne interfejsy API z czujnikiem haptycznym.

Interfejs API Metody Dodano rok
android.view.stałe reakcje haptyczne
  • KLIKNIĘCIE_KONTEXT
  • Znacznik_zegarka
  • WIRTUALNY_KLUCZ
  • DOTKNIJ_KLAWIATURY
  • DŁUGIE NACIŚNIENIE
Przed 2016 r.
  • NACIŚNIENIE_KLAWIATURY
  • PREMIERA_KLUCZOWE
  • RĘKA_TEKSTOWA_PRZENIESIENIE
  • VIRTUAL_KEY_release
2017 (Android 8)
  • POTWIERDŹ
  • ODRZUĆ
  • GESTURE_START
  • GESTURE_END
2020 (Android 11)
Android.View
  • PerformanceHapticfeedback()
Przed 2016 r.
android.os.Wibrator
  • wibracja()
  • hasVibrator()
Przed 2016 r.
  • hasAmplitudeControl()
2017 (Android 8)
  • areAllEffectsSupported()
  • areAllPrimitivesSupported()
  • areEffectsSupported()
  • sąPrimitivesSupported()
2020 (Android 11)
android.os.Efekt wibracyjny
  • createOneShot()
  • createWaveform()
2017 (Android 8)
  • EKF_TICK
  • EFEK_KLIKNIĘCIE
  • EFEKTY.HEAVY_KLIKNIĘCIE
  • EFEKTY_DOUBLE_KLIKNIJ
  • createPredefined()
2019 (Android 10)
android.os.Efekt Wibracji.Kompozycja
  • PRIMITIVE_TICK
  • PRIMITIVE_KLIKNIĘCIE
  • addPrimitive()
  • kompozycja()
2020 (Android 11)
android.media.AudioAttributes.Builder
  • setHapticChannelsmuted().
2019 (Android 10)

Tętniące życiem wibracje

Od pagerów i telefonów z podstawową przeglądarką oraz niskiej jakości, ale energooszczędnego systemu zarządzania relacjami z klientami wibracje oparte na dzwonku zastąpiły dzwonienie trybie cichym. Starsze komponenty sprzętowe, które generują głośne i nieprzyjemne dźwięki słyszalne szumy mogą uszkodzić reakcje haptyczne, ponieważ są to wyświetlenia niskiej jakości (na np. tani, zepsuty telefon).

Wyczyść czujnik haptyczny

Wyraźny czujnik haptyczny wzbudza odczucie dyskretnych zmian stanu (np. zmiany binarne podczas włączania/wyłączania zasilania). Ze względu na charakter dyskretną afordancję, jednoznaczne czujniki haptyczne są generowane jako pojedynczy element (na potrzeby np. jeden efekt haptyczny na jedno zdarzenie wejściowe).

Celem Androida jest wyraźna reakcja haptyczna dająca silne, ale ostre wrażenia. niż uczucie hałasu lub nieśmiałości.

Wstępnie zdefiniowane stałe haptyczne, które są tworzone z myślą o obsłudze wyraźnego czujnika haptycznego, to m.in. w następujący sposób.

W HapticFeedbackConstants:

  • CLOCK_TICK
  • CONFIRM
  • CONTEXT_CLICK
  • GESTURE_END
  • GESTURE_START
  • KEYBOARD_PRESS
  • KEYBOARD_RELEASE
  • KEYBOARD_TAP
  • LONG_PRESS
  • REJECT
  • TEXT_HANDLE_MOVE
  • VIRTUAL_KEY
  • VIRTUAL_KEY_RELEASE

W VibrationEffect:

  • EFFECT_CLICK
  • EFFECT_DOUBLE_CLICK
  • EFFECT_HEAVY_CLICK
  • EFFECT_TICK

Dzielenie się wspólną wiedzą między producentami urządzeń i deweloperami jest kluczowe poprawę ogólnej jakości reakcji haptycznych w ekosystemie Androida. Użyj podstawowej listy kontrolnej, oceny sprzętu, oraz CDD. aby dowiedzieć się więcej o wdrażaniu reakcji haptycznych.

Dla prasy i publikacji

Rysunek 3. Naciskanie i puszczanie.

Bogata reakcja haptyczna

Bogata reakcja haptyczna to rozwijająca się kategoria, która wykracza poza zakres funkcji haptycznych. oparte na impulsach. Android chce obsługiwać zaawansowane czujniki haptyczne i możliwości ich dostosowania na bardzo szczegółowym poziomie. Poniżej są obsługiwane w Androidzie 11 i starszych wersjach.

Technologia haptyczna

Rysunek 4. Bogata reakcja haptyczna z przesuwaną teksturą

Przeciąganie i przeciąganie

Rysunek 5. Przeciąganie i przesuwanie

Przypadek użycia 1. Przesuwanie tekstury

Jeśli efekt haptyczny powtarza się, gdy palec przesuwa się po powierzchni dotykowej (na na przykład przeciąganie, przesuwanie, poznawanie powierzchni za pomocą wzruszającej tekstury haptycznej), powtórzone efekty haptyczne powinny być ostre i subtelne.

Jeśli w danym przypadku efekt jest głośny, a nie wyraźny, odstępy między i powtórzenia mogą zostać wyeliminowane. Efektem jest jeden długi szum, niż wiele odrębnych sygnałów.

Jeśli amplituda nie jest wystarczająco subtelna, odczuwana energia haptyczna narasta. przez powtórzenia, co skutkuje niezwykłą czułością haptyczną na końcu lub powtórzenia.

Zastosuj prostą teksturę haptyczną na potrzeby gestów przesuwania i przeciągania

Używaj aplikacji CLOCK_TICK i TEXT_HANDLE_MOVE w HapticFeedbackConstants. Te stałe określają cechy powtórzenia i amplitudy.

Utwórz własny efekt

Aby utworzyć własny efekt, skomponuj projekt, łącząc ze sobą sekwencje z PRIMITIVE_CLICK i PRIMITIVE_TICK w VibrationEffect.Composition. Możesz dostosować charakterystykę powtórzenia i skali amplitudy za pomocą funkcji addPrimitive(int primitiveID, float scale, int delay). Pomoc zależy od CAP_COMPOSE_EFFECTS funkcji Interfejs HAL Vibrator.

Przypadek użycia 2. Długie wibracje z efektem wygładzania

Długa wibracja to płynna amplituda, która zmienia się od 0 do docelowa amplituda. Długie wibracje mogą wywoływać zauważenie reakcja haptyczna. Jednak nagłe, długie wibracje mogą wystraszyć użytkowników, gdy i często słychać tu buczenie. Aby generować więcej przyjemne, długie wibracje, zastosuj efekt łagodności na początku długiego wibracjami. W ten sposób powstaje płynne przejście amplitudy, które narasta w kierunku docelowa amplituda.

Zastosuj efekt wygładzania

  1. Sprawdź możliwości sprzętowe regulacji amplitudy za pomocą android.os.Vibrator.hasAmplitudeControl()

    • Aby uzyskać efekt łagodzenia za pomocą funkcji, wynik musi wynosić true o zmiennej amplitudzie.
  2. Używaj VibrationEffect.createWaveform(timings[], amplitudes[], int repeat)

  3. Dostosuj serię timings[] i amplitudes[], aby wygenerować zgodnie z rys. 6.

Długie wibracje

Rysunek 6. Długa krzywa prostoty wibracji

Przypadek użycia 3: czujnik haptyczny sprzężony z dźwiękiem

Reakcja haptyczna sprzężona przez dźwięk to wzorce haptyczne połączone z rytmem dźwięku. zwrócić uwagę użytkownika.

Reakcja haptyczna sprzężona audio: korzyści

Aby zastosować czujnik haptyczny połączony z dźwiękiem, połącz wyraźne czujniki haptyczne z długimi wibracjami. Silne, ale krótkie uczucie haptyczne, wynikające z wyraźnych reakcji haptycznych, zapewnia rytmiczne wzory. W połączeniu z wysokimi poziomami bodźców przez długi czas Wibracje znakomicie przyciągają uwagę użytkownika.

Ważne jest, aby wziąć pod uwagę rytmiczne wzorce czucia. Jeśli nie ma sensu rytmu serca, użytkownik postrzega odczucia haptyczne jako przypadkowe wibrowanie i i zignorować je.

Para audio

Rysunek 7. Przykład czujnika haptycznego pary dźwięku

Reakcja haptyczna sprzężona z dźwiękiem: wskazówki

Wdrożenie reakcji na dotyk połączonej z dźwiękiem wymaga podstawowej wiedzy na temat treści odtwarzania zarówno kanałów audio, jak i haptycznych. Pamiętaj o tych kwestiach.

  • Korzystanie z MediaPlayer lub SoundPool zajęcia.

    • Zasoby w formacie OGG ze specjalnym kluczem metadanych (ANDROID_HAPTIC, po czym następuje kilka kanałów haptycznych) wskazuje obecność danych haptycznych i odtwarzanie z użyciem MediaPlayer i SoundPool.
  • Wskaż obsługę reakcji haptycznych i odtwarzania dźwięku w: audio_policy_configuration.xml

    • Użyj profilu wyjściowego z kanałem reakcji haptycznych AUDIO_CHANNEL_OUT_HAPTIC_A|B
    • W przypadku strumienia wyjściowego z kanałami haptycznymi pamiętaj, że Kanały są prezentowane w danych jako dodatkowe kanały.

    Przykład

    Jeśli maska kanału dla strumienia wyjściowego wygląda tak:

    AUDIO_CHANNEL_OUT_STEREO_HAPTIC_A

    Następnie każda próbka powinna wyglądać tak:

    AUDIO_LEFT_CHANNEL,AUDIO_RIGHT_CHANNEL,HAPTIC_CHANNEL_A

  • Zmień AudioAttributes.Builder( ).setHapticChannelsMuted(boolean muted) do false, aby włączyć kanał haptyczny.

    • Domyślnie kanały reakcji haptycznych są wyciszone (true).
    • Przypadki użycia obejmują dzwonki i dźwięki interfejsu z synchronizacją reakcja haptyczna i reakcja haptyczna.
  • HAL Vibrator musi implementować zewnętrzne wsparcie kontroli.

Technologia haptyczna sprzężona z dźwiękiem

Rysunek 8. Wdrożenie reakcji haptycznych połączonych dźwiękami

Czujnik haptyczny sprzężony z dźwiękiem: generator haptyczny

HapticGenerator jest efektem dźwiękowym wprowadzone w Androidzie 12, które mogą generować dane haptyczne na podstawie kanału audio odtwarzać ją w czasie rzeczywistym jako sprzęt haptyczny połączony z dźwiękiem. Efekt zostanie zastosowany do zakresu AudioTrack zgodnie z opisem na Rysunku 9.

Architektura generatora haptycznego

Rysunek 9. Architektura generatora haptycznego

Aby mieć pewność, że algorytm generatora haptycznego generuje wysokiej jakości czujniki haptyczne, dostroić algorytm generowania do silnika wibracyjnego urządzenia, dostosowując parametrów konfigurujących łańcuch filtrów, które są stosowane do fal dźwiękowych. W tej sekcji szczegółowo opisujemy te parametry oraz wyjaśniamy, jak je dostrajać zgodnie ze specyfikacją sprzętu.

  1. Częstotliwość rezonansowa dla filtra pasmowego

    Częstotliwość rezonansu wibracyjnego to częstotliwość, z jaką uruchamiany jest element haptyczny ma maksymalną moc wyjściową. Ten parametr reguluje antyrezonator częściowo spłaszcz funkcję przesyłania odpowiedzi w celu uzyskania większej przepustowości. Platforma Androida automatycznie łączy tę wartość z danymi wyjściowymi interfejsu Metoda HAL wibracji IVibrator.getResonantFrequency.

    Wartość domyślna tego parametru to 150 Hz. Można to zmienić w tutaj.

  2. Moc normalizacji dla wolnej obwiedni

    Ten parametr określa wykładnik w częściowej normalizacji. (automatyczna kontrola wzmocnienia). Jej wartość domyślna to -0,8, co oznacza, że Ten krok kontroli wzmocnienia usuwa 80% zmian zakresu dynamicznego. Można to zmienić w kodzie tutaj.

  3. Współczynnik Q filtra zatrzymania zakresu

    Współczynnik jakości wibracji (współczynnik Q) jest określany na podstawie 2 parametrów:

    • Zero Q, współczynnik jakości zer w filtrze zakresu czasowego, który częściowo eliminuje rezonans.

    • Biegun Q, współczynnik jakości słupków w filtrze zmiennym.

    Stosunek tych dwóch wartości ogranicza tłumienie rezonansów w kolejności aby wzmocnić niższe częstotliwości i rozszerzyć odpowiedź algorytmu. Przykład: domyślne wartości 8 dla zero Q i 4 dla bieguna Q. współczynnik 2, co ogranicza tłumienie rezonansów do 2 (6 dB). Platforma Androida łączy obie wartości z danymi wyjściowymi interfejsu Vibrator HAL metoda IVibrator.getQFactor.

    Jeśli wartości domyślne nie uwzględniają tłumienia siły silnika zalecamy zmianę obu tych wartości jednocześnie. albo zwiększania, albo zmniejszania obu tych elementów. Stosunek zero Q do bieguna Q powinna być większa niż 1. Można to zmienić w kodzie tutaj.

  4. Częstotliwość narożników zniekształceń

    Częstotliwość narożników jest stosowana przez filtr dolnoprzepustowy, który ukrywa wibracje niskopoziomowe i wzmacniające wyższe poziomy dzięki sześciennemu zniekształceniu. Domyślne ustawienie to 300 Hz. Można to zmienić w kodzie tutaj.

  5. Wzmocnienie wejściowe i próg sześcienny zniekształceń

    Te parametry są używane przez filtr zniekształceń nieliniowych zastosowany do fala wejściowa, która tłumi amplitudę sygnałów o niższych częstotliwości zwiększają częstotliwość.

    • Domyślna wartość współczynnika wzmocnienia wejściowego to 0,3.
    • Domyślna wartość progu sześcianu to 0,1.

    Zalecamy zmianę obu tych wartości jednocześnie. Można je znaleźć w kodzie tutaj.

    Więcej informacji o funkcji stosowanej przez ten filtr znajdziesz tutaj: na temat implementacji, które są dostępne tutaj. Aby dowiedzieć się więcej o wpływie tych 2 parametrów na dane wyjściowe, zalecamy sporządzenie wykresu odpowiedzi częstotliwości i obserwację, odpowiedzi częstotliwości zmieniają się w zależności od wartości parametrów.

  6. Wzmocnienie wyjściowe przy zniekształcaniu

    Ten parametr steruje końcową amplitudą wibracji. To końcowa korzyść jest stosowany po łagodnym ograniczeniu, które ogranicza amplitudę wibracji do mniejszej niż 1. Jej wartość domyślna to 1.5. Można ją zmienić w kodzie. tutaj. Jeśli wibracje są zbyt subtelne, zwiększ wartość. Jeśli słyszysz stukania w mechanizmie wykonawczym, zmniejsz wartość.