Die gängigsten Vibrationsaktoren auf Android-Geräten sind lineare Resonanzsaktoren (LRAs). LRAs simulieren das Gefühl eines Tastenklicks auf einer ansonsten nicht reagierenden Glasoberfläche. Ein klares und präzises Klickfeedbacksignal dauert in der Regel zwischen 10 und 20 Millisekunden. Dadurch wirken Nutzerinteraktionen natürlicher. Bei virtuellen Tastaturen kann dieses Klickfeedback die Tippgeschwindigkeit erhöhen und Fehler reduzieren.
LRAs haben einige gängige Resonanzfrequenzen:
- Einige LRA hatten Resonanzfrequenzen im Bereich von 200 bis 300 Hz, was mit der Frequenz übereinstimmt, bei der die menschliche Haut am empfindlichsten auf Vibrationen reagiert. Die Vibrationen in diesem Frequenzbereich werden in der Regel als weich, scharf und durchdringend beschrieben.
- Andere Modelle von LRA haben niedrigere Resonanzfrequenzen von etwa 150 Hz. Das Gefühl ist qualitativ weicher und voller (in der Dimension).
Bei gleicher Eingangsspannung bei zwei verschiedenen Frequenzen können die Vibrationsausgabeamplituden unterschiedlich sein. Je weiter die Frequenz von der Resonanzfrequenz des LRA entfernt ist, desto niedriger ist die Vibrationsamplitude.
Für die haptischen Effekte eines bestimmten Geräts werden sowohl der Vibrationsaktor als auch sein Treiber verwendet. Haptische Treiber mit Übersteuerungs- und aktiven Bremsfunktionen können die Anlaufzeit und das Klingeln von LRA verringern, was zu einer reaktionsschnelleren und klareren Vibration führt.
Standardmäßige Wellenformglättung auf Geräten
Zur Veranschaulichung sehen wir uns an, wie sich ein benutzerdefiniertes Wellenformmuster auf einem generischen Gerät verhält:
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 // Don't 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 // Don't repeat.
vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex));
Die folgenden Grafiken zeigen die Eingabewellenform und die Ausgabebeschleunigung, die den vorherigen Code-Snippets entsprechen. Die Beschleunigung steigt nicht plötzlich, sondern allmählich an, wenn es zu einer sprunghaften Änderung der Amplitude im Muster kommt, also bei 0 ms, 150 ms, 200 ms, 250 ms und 700 ms. Außerdem gibt es bei jeder Stufenänderung der Amplitude einen Überschwinger und ein sichtbares Überschwingen, das mindestens 50 ms dauert, wenn die Eingangsamplitude plötzlich auf 0 fällt.
Verbessertes haptisches Muster
Ändern Sie die Amplituden schrittweise, um Überschwinger zu vermeiden und die Klingelzeit zu verkürzen. Im Folgenden sind die Wellenform- und Beschleunigungsdiagramme der überarbeiteten Version zu sehen:
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));
Komplexere haptische Effekte erstellen
Andere Elemente einer zufriedenstellenden Klickreaktion sind komplexer und erfordern einige Kenntnisse über die LRA, die auf einem Gerät verwendet wird. Die besten Ergebnisse erzielen Sie, wenn Sie die vordefinierten Wellenformen und die von der Plattform bereitgestellten Konstanten des Geräts verwenden. So haben Sie folgende Möglichkeiten:
- Verwenden Sie klare Effekte und Primitive.
- Sie können sie kombinieren, um neue haptische Effekte zu erstellen.
Mit diesen vordefinierten haptischen Konstanten und Primitiven können Sie Ihre Arbeit erheblich beschleunigen und gleichzeitig hochwertige haptische Effekte erzielen.