Element dm. do czynników wibracyjnych

Zanim zaprojektujesz efekty haptyczne na urządzeniu z Androidem, warto poczytać o tym, jak działają elementy sterujące wibracjami.

Ilustracja składowa haptycznej LRA

Najpopularniejsze urządzenia wywołujące drgania to liniowy rezonator rezonansowy (LRA). Każda z LRA składa się z cewki głosowej dociskanej do magnetycznej masy ruchomej przymocowanej do sprężyny. Napięcie prądu przemiennego przyłożone do cewki głosowej generuje siłę elektromagnetyczną, która powoduje poruszanie się masy. Sprężyna działa na siłę, która powoduje, że masa powraca do swojego położenia początkowego. Ruch obrotowy masy sprawia, że LRA wibruje. Mają one częstotliwość rezonansową, przy której wyjście jest maksymalną.

Przy takim samym napięciu wejściowym przy 2 różnych częstotliwościach amplitudy wyjściowe wibracji mogą się różnić. Im większa odległość od częstotliwości rezonansowej LRA, tym mniejsza amplituda drgań.

Jedną z typowych funkcji LRA w urządzeniach jest symulowanie odczucia kliknięcia przycisku na szklanej powierzchni, która nie reaguje. Dzięki temu interakcja użytkownika jest bardziej naturalna. Po zastosowaniu do pisania na klawiaturze wirtualnej kliknięcie potwierdzenia przy użyciu kliknięć może zwiększyć szybkość pisania i zmniejszyć liczbę błędów. Wyraźny i wyraźny sygnał potwierdzenia kliknięcia trwa zwykle mniej niż 10–20 milisekund. Uzyskanie odpowiedniego kliknięcia wymaga pewnej wiedzy o LRA wykorzystywanej w urządzeniu. Właśnie dlatego korzystanie z gotowych fal pozwala uzyskać najlepszą opinię o kliknięciu. Możesz ich używać ze stałymi udostępnianymi przez platformę za każdym razem, gdy potrzebne są opinie o kliknięciach.

Uzyskane w urządzeniu efekty haptyczne zależą od mechanizmu wibracji, a także od jego sterownika. Przetworniki haptyczne, w których zastosowano funkcje Overdrive i aktywne hamowanie, mogą skrócić czas narastania i sygnalizowania dzwonków LRA, co przekłada się na bardziej responsywne i wyraźne wibracje. Dla przykładu zobaczmy, jak niestandardowy wzorzec fali zachowuje się na urządzeniu standardowym.

Kotlin

val timings: LongArray = longArrayOf(50, 50, 50, 50, 50, 100, 350, 250)
val amplitudes: IntArray = intArrayOf(77, 79, 84, 99, 143, 255, 0, 255)
val repeatIndex = -1 // Do not repeat.

vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex))

Java

long[] timings = new long[] { 50, 50, 50, 50, 50, 100, 350, 250 };
int[] amplitudes = new int[] { 77, 79, 84, 99, 143, 255, 0, 255 };
int repeatIndex = -1 // Do not repeat.

vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex));

Poniższy wykres przedstawia falę odpowiadającą fragmentom kodu widocznym powyżej.

Wykres fali wejściowej funkcji kroku

Odpowiednie przyspieszenie wyświetla się poniżej:

Wykres zmierzonej fali pokazującej bardziej organiczne przejścia między poziomami

Pamiętaj, że przyspieszenie zwiększa się stopniowo, a nie nagle, gdy zachodzi stopniowa zmiana amplitudy wzorca (np. 0 ms, 150 ms, 200 ms, 250 ms, 700 ms). Występuje też nadmierna liczba przy każdej zmianie amplitudy kroczącej oraz widoczne „dzwonienie”, które trwa co najmniej 50 ms, gdy amplituda wejściowa nagle spada do 0.

Ten wzorzec reakcji haptycznej można ulepszyć, stopniowo zwiększając i zmniejszając amplitudę, aby uniknąć zbyt wielu reakcji i skrócić czas dzwonienia. Poniżej przedstawiono wykresy fali i przyspieszenia poprawionej wersji.

Kotlin

val timings: LongArray = longArrayOf(
    25, 25, 50, 25, 25, 25, 25, 25, 25, 25, 75, 25, 25,
    300, 25, 25, 150, 25, 25, 25
)
val amplitudes: IntArray = intArrayOf(
    38, 77, 79, 84, 92, 99, 121, 143, 180, 217, 255, 170, 85,
    0, 85, 170, 255, 170, 85, 0
)
val repeatIndex = -1 // Do not repeat.

vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex))

Java

long[] timings = new long[] {
        25, 25, 50, 25, 25, 25, 25, 25, 25, 25, 75, 25, 25,
        300, 25, 25, 150, 25, 25, 25
    };
int[] amplitudes = new int[] {
        38, 77, 79, 84, 92, 99, 121, 143, 180, 217, 255, 170, 85,
        0, 85, 170, 255, 170, 85, 0
    };
int repeatIndex = -1; // Do not repeat.

vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex));

Wykres fali wejściowej z dodatkowymi krokami

Wykres zmierzonej fali, pokazujący płynniejsze przejścia

Z tego powodu wywoływanie na urządzeniu z Androidem efektu haptycznego nie wymaga jedynie podania wartości częstotliwości i amplitudy. Zaprojektowanie od podstaw efektu haptycznego bez pełnego dostępu do specyfikacji technicznych mechanizmu wibracyjnego i sterownika nie jest łatwe. Interfejsy API Androida dostarczają stałe, dzięki którym możesz:

  • Stosuj wyraźne efekty i elementy podstawowe.

  • Połącz je, aby uzyskać nowe efekty haptyczne.

Te wstępnie zdefiniowane stałe i podstawowe elementy mogą znacznie przyspieszyć pracę, zapewniając wysoką jakość efektów haptycznych.