Wdrażaj elementy dotykowe

Producenci urządzeń są ogólnie uważani za właścicieli prywatnych aktywów tworzonych dla każdego urządzenia. W związku z tym ich wysiłki inżynieryjne często skupiają się na poszczególnych urządzeniach ; Niewielki lub żaden wysiłek poświęcany jest spójności innych urządzeń w ekosystemie.

W przeciwieństwie do tego programiści starają się tworzyć aplikacje, które działają na wszystkich telefonach z Androidem w ekosystemie, niezależnie od specyfikacji technicznych każdego urządzenia. Ta różnica w podejściu może powodować problem fragmentacji, na przykład możliwości sprzętowe niektórych telefonów nie odpowiadają oczekiwaniom określonym przez twórców aplikacji. Jeśli więc interfejsy API dotykowe działają na niektórych telefonach z Androidem, ale na innych nie, efektem jest niespójny ekosystem. Właśnie dlatego konfiguracja sprzętu odgrywa kluczową rolę w zapewnieniu producentom możliwości wdrożenia interfejsów API dotykowych systemu Android na każdym urządzeniu.

Na tej stronie znajduje się lista kontrolna, która krok po kroku umożliwia skonfigurowanie zgodności sprzętu w celu najlepszego wykorzystania interfejsów API systemu Android.

Poniższy rysunek ilustruje budowanie wspólnej wiedzy pomiędzy producentami urządzeń i programistami, co jest kluczowym krokiem w tworzeniu spójnego ekosystemu.

Schemat przypadków użycia haptyki dla twórców aplikacji i producentów urządzeń

Rysunek 1. Budowanie wiedzy pomiędzy producentami urządzeń a programistami

Lista kontrolna wdrożenia funkcji dotykowych

  1. Zaimplementuj stałe

    • Lista stałych do implementacji haptyki.
  2. Mapuj stałe pomiędzy HAL i API

  3. Oceń sprzęt

    • Instrukcje dotyczące docelowych efektów dotykowych. Skorzystaj z tych instrukcji, aby przeprowadzić szybkie sprawdzenie sprzętu.

Poniżej omówimy każdy z tych kroków bardziej szczegółowo.

Krok 1: Zaimplementuj stałe

Wykonaj te kontrole, aby ustalić, czy Twoje urządzenie spełnia minimalne wymagania dotyczące wdrożenia funkcji dotykowych.

Schemat procesu wdrażania haptyki

Rysunek 2. Efekty wdrożenia

Schemat blokowy kroków wdrażania elementów podstawowych

Rysunek 3. Implementacja prymitywów

Sprawdź status implementacji następujących stałych dotykowych.

Stałe dotykowe Lokalizacje i podsumowania
EFFECT_TICK , EFFECT_CLICK , EFFECT_HEAVY_CLICK , EFFECT_DOUBLE_CLICK Klasa VibrationEffect
Stałe dotykowe w VibrationEffect nie obejmują żadnego pojęcia zdarzeń wejściowych i nie mają elementów interfejsu użytkownika. Stałe obejmują zamiast tego pojęcie poziomów energii, takie jak EFFECT_CLICK i EFFECT_HEAVY_CLICK , które są wywoływane przez funkcję createPredefined() .
PRIMITIVE_TICK , PRIMITIVE_CLICK , PRIMITIVE_LOW_TICK> , PRIMITIVE_SLOW_RISE , PRIMITIVE_QUICK_RISE , PRIMITIVE_QUICK_FALL , PRIMITIVE_SPIN , PRIMITIVE_THUD Klasa VibrationEffect.Composition
Stałe dotykowe w VibrationEffect.Composition mogą mieć skalowalną intensywność, która jest wywoływana przez addPrimitive(int primitiveId, float scale, int delay) .

Opisane poniżej alternatywne wibracje są wykonywane na urządzeniach, które nie implementują stałych VibrationEffect . Zaleca się aktualizację tych konfiguracji, aby zapewnić najlepszą wydajność na takich urządzeniach.

  1. EFFECT_CLICK

    Wibracje w kształcie fali utworzone za pomocą VibrationEffect.createWaveform i taktowania skonfigurowane w frameworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern .

  2. EFFECT_HEAVY_CLICK

    Wibracje w kształcie fali utworzone za pomocą VibrationEffect.createWaveform i taktowania skonfigurowane w frameworks/base/core/res/res/values/config.xml##config_longPressVibePattern .

  3. EFFECT_DOUBLE_CLICK

    Wibracje w kształcie fali utworzone za pomocą VibrationEffect.createWaveform i czasów (0, 30, 100, 30).

  4. EFFECT_TICK

    Wibracje w kształcie fali utworzone za pomocą VibrationEffect.createWaveform i taktowania skonfigurowane w frameworks/base/core/res/res/values/config.xml##config_clockTickVibePattern .

Schemat blokowy etapów testowania informacji zwrotnej dotykowej

Rysunek 4. Implementacja stałych sprzężenia zwrotnego

Sprawdź stan następujących stałych opinii publicznej.

Stałe dotykowe Lokalizacje i podsumowania
CLOCK_TICK , CONTEXT_CLICK , KEYBOARD_PRESS , KEYBOARD_RELEASE , KEYBOARD_TAP , LONG_PRESS , TEXT_HANDLE_MOVE , VIRTUAL_KEY , VIRTUAL_KEY_RELEASE , CONFIRM , REJECT , GESTURE_START , GESTURE_END Klasa HapticFeedbackConstants
Stałe haptyczne w HapticFeedbackConstants wspomagają zdarzenia wejściowe z określonymi elementami interfejsu użytkownika, takimi jak KEYBOARD_PRESS i KEYBOARD_RELEASE , które są wywoływane przez performHapticFeedback() .

Krok 2: Mapuj stałe między HAL i API

Krok 2 przedstawia zalecane mapowania pomiędzy publicznymi stałymi HAL i stałymi API. Jeśli sprzęt oceniany w kroku 1 nie implementuje stałych HAL, należy zastosować krok 2 do aktualizacji wzorców awaryjnych opisanych w kroku 1 w celu wygenerowania podobnych wyników. Mapowanie jest wspomagane przez dwa różne modele domyślne.

  • Model dyskretny (prosty)

    • Amplituda jest kluczową zmienną w tym modelu. Każda jednostka w warstwie HAL reprezentuje inną amplitudę dotykową.
    • Model ten stanowi minimalne wymaganie potrzebne do wdrożenia podstawowego haptycznego UX.
    • Bardziej zaawansowany haptyczny UX wymaga zaawansowanego sprzętu i zaawansowanego modelu (model ciągły).
  • Model ciągły (zaawansowany)

    • Tekstura i amplituda to kluczowe zmienne tego modelu. Każda jednostka w warstwie HAL reprezentuje różne tekstury dotykowe. Amplituda każdej jednostki HAL jest kontrolowana przez współczynnik skali ( S ).
    • Ten model wymaga zaawansowanego sprzętu. Jeśli producenci OEM chcą korzystać z zaawansowanego haptycznego UX z VibrationEffect.Composition (w celu najlepszego wykorzystania najnowszych interfejsów haptycznych API), zaleca się wdrożenie ich sprzętu przy użyciu tego modelu.

Dyskretny model

Zalecane jest mapowanie wszystkich stałych publicznych udostępnianych w API na odpowiednie stałe HAL. Aby rozpocząć ten proces, dowiedz się, ile przebiegów dotykowych o dyskretnej amplitudzie urządzenie może zdefiniować w warstwie HAL. Konkretne pytanie oparte na tym pojęciu wygląda następująco: Ile efektów dotykowych pojedynczego impulsu z odczuwalnymi przez człowieka różnicami w amplitudzie można zdefiniować w moim telefonie? Odpowiedź na to pytanie determinuje mapowanie.

Definiowanie stałych HAL jest procesem zależnym od sprzętu. Na przykład telefon podstawowy może mieć jedynie możliwości sprzętowe umożliwiające wygenerowanie pojedynczego przebiegu dotykowego. Urządzenia z bardziej zaawansowanymi komponentami sprzętowymi wytwarzają szerszy zakres dyskretnych poziomów amplitudy i mogą definiować wiele przebiegów dotykowych w warstwie HAL. Mapowanie stałych HAL-API pobiera stałą HAL (używając średniej amplitudy jako linii bazowej), a następnie na tej podstawie organizuje silniejsze lub słabsze efekty.

Schemat stałego zakresu HAL i amplitud sprzężenia zwrotnego

Rysunek 5. Stały zakres HAL według amplitudy

Po zdefiniowaniu liczby stałych HAL o dyskretnej amplitudzie, czas na odwzorowanie stałych HAL i API na liczbę stałych HAL. Ten proces mapowania może podzielić stałą API pojedynczego impulsu na maksymalnie trzy odrębne grupy poziomów amplitudy. Sposób segmentacji stałych API opiera się na zasadach UX dla towarzyszących zdarzeń wejściowych. Aby uzyskać więcej informacji, zobacz Projekt Haptics UX .

Dyskretny model mapowania stałych HAL-API

Rysunek 6. Mapowanie stałych HAL-API: Model dyskretny

Jeśli Twoje urządzenie obsługuje tylko dwie stałe HAL z dyskretnymi amplitudami, rozważ połączenie stałych HAL o średnim i wysokim poziomie amplitudy. Przykładem tego pojęcia w praktyce byłoby mapowanie EFFECT_CLICK i EFFECT_HEAVY_CLICK na tę samą stałą HAL, która byłaby stałą HAL na poziomie średniej amplitudy. Jeśli Twoje urządzenie obsługuje tylko jedną stałą HAL z dyskretną amplitudą, rozważ połączenie wszystkich trzech poziomów w jeden.

Model ciągły

Model ciągły ze skalowalnością amplitudy można zastosować do zdefiniowania stałych HAL. Do stałych HAL można zastosować współczynnik skali ( S ) (na przykład HAL_H0 , HAL_H1 ) w celu uzyskania skalowanego HAL ( HAL_H0 x S ). W tym przypadku skalowana warstwa HAL jest mapowana w celu zdefiniowania stałych API ( HAL_H0 x S1 = H0S1 = EFFECT_TICK ), jak pokazano na rysunku 7. Korzystając ze skalowalności amplitudy modelu ciągłego, urządzenie może przechowywać niewielką liczbę stałych HAL z charakterystycznymi teksturami i dodaj zmiany amplitudy, dostosowując współczynnik skali ( S ). Producenci urządzeń mogą definiować liczbę stałych HAL w oparciu o liczbę różnych tekstur dotykowych, które chcą zapewnić.

Stały zakres HAL według tekstury i amplitudy

Rysunek 7. Zakres stałej HAL według tekstury (HAL_H0) i skala amplitudy (S)

Ciągły model mapowania stałych HAL-API

Rysunek 8. Mapowanie stałych HAL-API: Model ciągły

W modelu ciągłym różne stałe HAL reprezentują różne tekstury dotykowe, a nie różne amplitudy; współczynnik skali ( S ) może skonfigurować amplitudę. Ponieważ jednak percepcja tekstury (na przykład ostrość) jest powiązana z percepcją czasu trwania i amplitudy, zalecane jest łączenie tekstury i współczynnika skali (w procesie projektowania mapowania HAL-API).

Rysunek 7 ilustruje ciągłe mapowanie poprzez zwiększenie odchylenia od jednej HAL do wielu stałych API ze skalowalnością amplitudy.

Rosnąca zmienność 1

Zwiększanie zmienności 2

Rysunek 9. Rosnąca zmienność ze skalowalnością amplitudy

W przypadku wszystkich skalowalnych stałych API, takich jak PRIMITIVE_TICK i PRIMITIVE_CLICK w VibrationEffect.Composition , poziom energii stałej API zależy od parametru float scale , gdy stała API jest deklarowana poprzez addPrimitive(int primitiveID, float scale, int delay) . PRIMITIVE_TICK i PRIMITIVE_CLICK można zaprojektować z wyraźnym rozróżnieniem, używając różnych stałych HAL. To podejście jest zalecane, jeśli chcesz dodać urozmaicenie do tekstury .

Krok 3: Oceń sprzęt

Ocena sprzętu obejmuje zdefiniowanie trzech efektów dotykowych, oznaczonych jako Efekty 1, 2 i 3 w przypadku tej konkretnej oceny.

Efekt 1: Predefiniowane krótkie stałe dotykowe

Stała VibrationEffect.EFFECT_CLICK jest efektem bazowym lub wspólnym mianownikiem w mapowaniu HAL-API podanym w kroku 2. Jest ona mapowana przy użyciu najczęściej używanego efektu, HapticFeedbackConstants.KEYBOARD_PRESS . Ocena tego efektu pomaga określić gotowość urządzenia docelowego do uzyskania wyraźnego efektu dotykowego .

Efekt 2: Krótki, niestandardowy efekt dotykowy

Stała VibrationEffect.createOneShot(20,255) służy do niestandardowych efektów dotykowych. W przypadku krótkich, pojedynczych impulsów niestandardowych zalecanym maksymalnym progiem określającym czas trwania jest 20 ms. Pojedynczy impuls dłuższy niż 20 ms nie jest zalecany, ponieważ jest odbierany jako brzęcząca wibracja .

Przebieg krótkiego, niestandardowego efektu dotykowego

Rysunek 10. Krótki, niestandardowy efekt dotykowy

Efekt 3: Długi, niestandardowy efekt dotykowy ze zmianą amplitudy

Stała VibrationEffect.createWaveform(timings[], amplitudes[], int repeat) jest przeznaczona dla długich efektów niestandardowych ze zmianami amplitudy. Możliwość wytwarzania różnych amplitud dla niestandardowych efektów dotykowych jest jednym ze wskaźników oceny możliwości urządzenia w zakresie bogatej obsługi dotykowej . Zalecane timings [] i amplitudes [] to odpowiednio {500, 500} i {128, 255} , co przedstawia tendencję rosnącą amplitudy od 50% do 100%, przy częstotliwości próbkowania 500 ms.

Przebieg efektu dotykowego ze zmianą amplitudy

Rysunek 11. Długi, niestandardowy efekt dotykowy ze zmianą amplitudy

Aby sprawdzić możliwości sprzętowe kontroli amplitudy dla Effect 3 należy skorzystać z metody Vibrator.hasAmplitudeControl() . Wynik musi być true , aby zgodnie z zamierzeniami można było wykonać VibrationEffect.createWaveform z różną amplitudą.

Schemat blokowy subiektywnej oceny efektu dotykowego

Rysunek 12. Ocena podmiotowa efektu dotykowego 1, 2 i 3

Dokonaj subiektywnej oceny

Aby szybko sprawdzić spójność, przeprowadź najpierw subiektywną ocenę. Celem subiektywnej oceny jest obserwacja amplitudy efektów dotykowych w celu ustalenia, czy urządzenie może generować wrażenia dotykowe o amplitudach wyczuwalnych przez człowieka.

Konkretne pytanie skonstruowane wokół tego pojęcia wygląda następująco: Czy urządzenie może wytwarzać dla użytkowników łatwo zauważalne efekty dotykowe zgodnie z oczekiwaniami? Odpowiedź na to pytanie pomoże Ci uniknąć nieudanych efektów dotykowych , w tym niezauważalnych efektów dotykowych, których użytkownicy nie mogą wyczuć, lub niezamierzonych efektów dotykowych, w przypadku których przebiegi nie tworzą wzorów zgodnie z zamierzeniami.