UX-Grundlage für ein haptisches Framework

Alle Verbesserungen des Android-Frameworks rund um die Haptik basieren auf eine Reihe von UX-Prinzipien, die sich in gleichem Tempo weiterentwickeln. Der aktuelle wird unter anderem die Vibration durch eine klare Haptik ersetzt. Haptisches Feedback

UX-Prinzipien

Abbildung 1: Aktuelle Prinzipien

In der folgenden Tabelle sind alle verfügbaren haptischen APIs aufgeführt.

API Methoden Jahr hinzugefügt
android.view.HapticFeedbackConstants
  • KONTEXT_KLICK
  • UHR_TICK
  • VIRTUELLER_SCHLÜSSEL
  • TASTATUR_TIPP
  • LANG_DRÜCKEN
Bis 2016
  • TASTATUR_DRÜCKEN
  • TASTATUR_RELEASE
  • TEXT_HANDLE_MOVE
  • VIRTUELLE_SCHLÜSSELVERÖFFENTLICHUNG
2017 (Android 8)
  • BESTÄTIGEN
  • ABLEHNEN
  • GESTURE_START
  • GESTURE_END
2020 (Android 11)
android.View
  • performHapticFeedback()
Bis 2016
android.os.vibrator
  • vibrieren()
  • hasVibrator()
Bis 2016
  • hasAmplitudeControl()
2017 (Android 8)
  • areAllEffectsSupported()
  • areAllPrimitivesSupported()
  • areEffectsSupported()
  • arePrimitivesSupported()
2020 (Android 11)
android.os.VibrationEffect
  • createOneShot()
  • createWaveform()
2017 (Android 8)
  • EFFEKT_TICK
  • EFFEKT_KLICK
  • EFFEKT_HEAVY_CLICK
  • EFFEKT_DOUBLE_CLICK
  • createVordefinierte()
2019 (Android 10)
android.os.VibrationEffect.Composition
  • EINFACHES_TICK
  • EINFACH_KLICK
  • addPrimitive()
  • Compose()
2020 (Android 11)
android.media.AudioAttributes.Builder
  • setHapticChannelsMuted()
2019 (Android 10)

Vibrationsalarm

Das geht auf Pager und Feature-Phones zurück – ein qualitativ minderwertiger, aber energieeffizienter ERM-System. Summer-basierte Vibrationen wurden anstelle von akustischen Klingeltönen verwendet. Lautlos-Modus an. Die Legacy-Hardwarekomponenten, die laute und unangenehme Geräusche erzeugen hörbare Geräusche können die haptische Nutzererfahrung beeinträchtigen, indem sie Impressionen von geringer Qualität liefern (für z. B. ein billiges, kaputtes Smartphone).

Haptik löschen

Die eindeutige Haptik unterstützt diskrete Statusänderungen, z. B. binäre Änderungen während des Ein-/Aus-Vorgangs). Aufgrund der Beschaffenheit des diskrete Angebote gibt, wird eine klare Haptik als eine Einheit generiert (für Beispiel: ein Haptik-Effekt pro Eingabeereignis).

Das Ziel von Android ist es, eine klare Haptik mit starken, aber scharfen Empfindungen zu bieten, als lebhafte oder matschige Empfindungen.

Zu den vordefinierten haptischen Konstanten, die für eine eindeutige Haptik erstellt wurden, gehören: Folgendes:

In 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

In VibrationEffect:

  • EFFECT_CLICK
  • EFFECT_DOUBLE_CLICK
  • EFFECT_HEAVY_CLICK
  • EFFECT_TICK

Um ein gemeinsames Wissen zwischen Geräteherstellern und Entwicklern aufzubauen, die Haptik insgesamt verbessert. Verwenden Sie die Methode einfache Checkliste, Hardwarebewertung, und CDD. um mehr über die haptische Implementierung zu erfahren.

Presse und Pressemitteilungen

Abbildung 3: Drücken und loslassen.

Starke Haptik

Starke Haptik ist eine wachsende Kategorie für haptisches Feedback, die über einzelne impulsbasierte Effekte. Ziel von Android ist die Unterstützung starker Haptik mit hohen Zusammensetzbarkeit und Anpassbarkeit mit sehr detailliertem Detaillierungsgrad. Die folgenden Anwendungsfälle werden in Android 11 oder niedriger unterstützt.

Vielfältige Haptik

Abbildung 4: Starke Haptik mit gleitender Textur

Ziehen und Wischen

Abbildung 5: Ziehen und Wischen

Anwendungsfall 1: Gleitende Textur

Wenn sich ein haptischer Effekt wiederholt, während der Finger über eine Touchoberfläche gleitet (für z. B. Ziehen, Wischen oder Erkunden einer Oberfläche mit einer phantomhaptischen Textur. sollten die sich wiederholenden Haptik-Effekte gestochen scharf und subtil sein.

Wenn der Einzeleffekt lebhaft und nicht klar ist, Wiederholungen werden wahrscheinlich verschwunden. Das Ergebnis ist eine lange Aufregung, als mehrere diskrete Signale.

Wenn die Amplitude nicht subtil genug ist, baut sich die wahrgenommene haptische Energie auf durch Wiederholungen, was zu einer starken Haptik am Ende die Wiederholung.

Einfache haptische Oberflächentextur für Wisch- und Ziehgesten implementieren

CLOCK_TICK und TEXT_HANDLE_MOVE verwenden in HapticFeedbackConstants Diese Konstanten definieren die Eigenschaften von Wiederholung und Amplitude vordefiniert.

Eigenen Effekt erstellen

Um Ihren eigenen Effekt zu erzielen, erstellen Sie ein Design, indem Sie Sequenzen aneinanderreihen von PRIMITIVE_CLICK und PRIMITIVE_TICK in VibrationEffect.Composition Sie können die Eigenschaften der Wiederholung und der Amplitudenskala anpassen. mit addPrimitive(int primitiveID, float scale, int delay). Der Support benötigt die CAP_COMPOSE_EFFECTS die Fähigkeit des Vibrator-HAL-Schnittstelle.

Anwendungsfall 2: Lange Vibration mit Leichtigkeit

Die lange Vibration ist eine sanfte Amplitudenvibration, die von 0 in die Zielamplitude. Lange Vibrationen erzeugen leicht wahrnehmbare Aufmerksamkeit Haptik. Allerdings kann ein plötzliches langes Vibrieren den Nutzer in einer stillen Dunkelheit erschrecken. und erzeugt oft hörbare Brummgeräusche. Um eine weitere sanfte Vibration am Anfang des langen Videos . Dies erzeugt einen sanften Amplitudenübergang, der in Richtung des Zielamplitude.

Ease-In-Effekt anwenden

  1. Hardwarefunktionen der Amplitudenregelung mit android.os.Vibrator.hasAmplitudeControl()

    • Das Ergebnis muss true sein, um einen Ease-In-Effekt mit mit unterschiedlicher Amplitude.
  2. Verwenden Sie VibrationEffect.createWaveform(timings[], amplitudes[], int repeat)

  3. Passen Sie die Reihe von timings[] und amplitudes[] an, um den Easing-in-Kurve, wie in Abbildung 6 dargestellt.

Lange Vibration

Abbildung 6: Lange Vibrationskurve

Anwendungsfall 3: Haptik mit Audiokopplung

Audiogekoppelte Haptik sind haptische Muster, die mit dem Audiorhythmus gekoppelt sind. um die Aufmerksamkeit der Nutzenden zu erhalten.

Haptik mit Audiokopplung: Vorteile

Zur Implementierung der audiogekoppelten Haptik solltest du deutliche Haptik mit langen Vibrationen kombinieren. Das starke, aber kurze haptische Gefühl dank des klaren Haptiks sorgt für diskrete rhythmischen Mustern entsprechen. In Kombination mit der hohen Menge an Reizen, Vibrationen liefern, weckt das die Aufmerksamkeit der Nutzenden.

Es ist wichtig, die empfindenden rhythmischen Muster zu berücksichtigen. Wenn es keinen Sinn gibt, nehmen die Nutzenden die haptischen Empfindungen als zufällige Vibrationen wahr und neigen sie zu ignorieren.

Audiopaar

Abbildung 7: Beispiel für die Haptik bei Audiopaaren

Haptik mit Audiokopplung: Tipps zur Implementierung

Die Implementierung von audiogekoppelter Haptik setzt ein grundlegendes Verständnis der Inhalte voraus sowohl Audio- als auch haptische Kanäle wiedergeben. Beachten Sie dabei Folgendes.

  • Verwenden Sie den MediaPlayer. oder SoundPool Klassen.

    • Assets im OGG-Format mit einem speziellen Metadatenschlüssel (ANDROID_HAPTIC gefolgt von einer Reihe haptischer Kanäle) geben an, haptische Daten und Wiedergabe mit MediaPlayer und SoundPool vorhanden.
  • Unterstützung von Haptik und Audiowiedergabe in audio_policy_configuration.xml

    • Ausgabeprofil mit Haptikkanal verwenden AUDIO_CHANNEL_OUT_HAPTIC_A|B
    • Denken Sie bei einem Ausgabestream mit haptischen Kanälen daran, Channels werden als zusätzliche Channels in den Daten dargestellt.

    Beispiel

    Wenn die Kanalmaske für den Ausgabestream so aussieht:

    AUDIO_CHANNEL_OUT_STEREO_HAPTIC_A

    Dann sollte jede Stichprobe so aussehen:

    AUDIO_LEFT_CHANNEL,AUDIO_RIGHT_CHANNEL,HAPTIC_CHANNEL_A

  • Ändern AudioAttributes.Builder( ).setHapticChannelsMuted(boolean muted) zu false, um den haptischen Kanal abzuspielen.

    • Haptische Kanäle sind standardmäßig stummgeschaltet (true).
    • Anwendungsfälle sind unter anderem Klingeltöne und Töne auf der Benutzeroberfläche mit synchronen Haptik und Feedback.
  • Der Vibrator HAL muss die Unterstützung externer Steuerungen implementieren.

Haptik für Audiokopplung

Abbildung 8: Audiogekoppelte Haptik implementieren

Audiogekoppelte Haptik: Haptik-Generator

HapticGenerator ist ein Audioeffekt eingeführt, die haptische Daten aus einem Audiokanal in Echtzeit als audiogekoppelte Haptik wiedergeben. Der Effekt wird auf AudioTrack angewendet wie in Abbildung 9 beschrieben.

Haptische Generator-Architektur

Abbildung 9: Haptische Generator-Architektur

Damit Ihr Algorithmus des haptischen Generators eine hochwertige Haptik erzeugt, den Generierungsalgorithmus auf den Vibrationsmotor des Geräts abstimmen, Parameter zur Konfiguration der Filterkette, die auf Audiowellenformen angewendet wird. In diesem Abschnitt werden diese Parameter ausführlich beschrieben und erläutert, wie sie abgestimmt werden können Hardwarespezifikation an.

  1. Resonanzfrequenz für Bandpassfilter

    Die Vibrationsresonanzfrequenz ist die Frequenz, mit der ein maximale Ausgabe. Mit diesem Parameter wird ein Antiresonator teilweise die Antwortübertragungsfunktion vereinfachen, um eine größere Bandbreite zu erhalten. Das Android-Framework verknüpft diesen Wert automatisch mit der Ausgabe des Vibrator-HAL-Methode IVibrator.getResonantFrequency.

    Der Standardwert für diesen Parameter ist 150 Hz. Dies kann im hier den Code.

  2. Normalisierungsleistung für langsamen Umschlag

    Dieser Parameter bestimmt den Exponenten bei der teilweisen Normalisierung (automatische Verstärkungsregelung). Der Standardwert ist -0.8. Das bedeutet, dass Bei dieser Verstärkungsregelung werden 80% der dynamischen Bereichsvariation entfernt. Dies kann hier im Code geändert werden.

  3. Q-Faktor für Bandstop-Filter

    Der Vibrationsqualitätsfaktor (Q-Faktor) wird durch zwei Parameter bestimmt:

    • Der Null-Q, der Qualitätsfaktor der Nullen im Bandstop-Filter, der bricht die Resonanz teilweise aus.

    • Der Pol Q, der Qualitätsfaktor der Pole im Bandstop-Filter.

    Das Verhältnis dieser beiden Werte begrenzt die Unterdrückung von Resonanz, um niedrigere Frequenzen zu verstärken und den Algorithmus auszuweiten. Beispiel: erhalten die Standardwerte 8 für Null Q und 4 für Pol Q ein Verhältnis von 2, wodurch die Resonanzunterdrückung um den Faktor 2 (6 dB) begrenzt wird. Das Android-Framework verknüpft beide Werte mit der Ausgabe des Vibrator-HAL IVibrator.getQFactor-Methode.

    Wenn die Standardwerte die Dämpfung der Motorstärke nicht berücksichtigen ändern, empfehlen wir, beide Werte gleichzeitig zu ändern und entweder beide erhöhen oder beide verringern. Das Verhältnis von Null Q zu Pol Q sollte größer als 1 sein. Dies kann hier im Code geändert werden.

  4. Eckenfrequenz für Verzerrung

    Die Eckenfrequenz wird durch einen Tiefpassfilter angewendet, der eine geringe Vibration und verstärkt die höheren Werte mithilfe einer kubischen Verzerrung. Die Standardeinstellung ist 300 Hz. Dies kann hier im Code geändert werden.

  5. Eingangsverstärkung und Kubusgrenzwert für Verzerrung

    Diese Parameter werden von einem nicht linearen Verzerrungsfilter verwendet, der auf das eine Eingangswellenform, die die Amplitude der Signale mit niedrigerer Frequenz dämpft, erhöht sich die Häufigkeit.

    • Der Standardwert für den Eingabeverstärkungsfaktor ist 0.3.
    • Der Standardwert für den Cube-Schwellenwert ist 0.1.

    Wir empfehlen, beide Werte zusammen zu ändern. Sie befinden sich im Code, hier.

    Weitere Informationen zu der von diesem Filter angewendeten Funktion finden Sie im Implementierung finden Sie hier. Um mehr darüber zu erfahren, wie diese beiden Parameter die Ausgabe beeinflussen, empfehlen, die Frequenzreaktionen der Filter darzustellen und zu beobachten, ändern sich die Häufigkeitsantworten mit verschiedenen Parameterwerten.

  6. Ausgangsverstärkung für Verzerrung

    Mit diesem Parameter wird die endgültige Amplitude der Vibration festgelegt. Es ist ein letzter Vorteil wird nach einem weichen Grenzwert angewendet, der die Amplituden der Vibration auf einen niedrigeren Wert begrenzt als 1. Der Standardwert ist 1.5 und kann im Code geändert werden. hier. Ist die Vibration zu gering, erhöhen Sie den Wert. Wenn Sie die Klapper an der Hardware, stelle den Wert herunter.