Android cihazlarda en yaygın titreşim aktüatörleri doğrusal rezonanslı aktüatörlerdir (LRA'lar). LRA'lar, normalde tepki vermeyen cam yüzeyde düğme tıklama hissini simüle eder. Net ve keskin bir tıklama geri bildirimi sinyali genellikle 10 ila 20 milisaniye sürer. Bu his, kullanıcı etkileşimlerinin daha doğal olmasını sağlar. Sanal klavyelerde bu tıklama geri bildirimi, yazma hızını artırabilir ve hataları azaltabilir.
LRA'ların birkaç yaygın rezonans frekansı vardır:
- Bazı LRA'ların rezonans frekansları 200 ila 300 Hz aralığındaydı. Bu frekans, insan derisinin titreşime en duyarlı olduğu frekansla aynıydı. Bu frekans aralığındaki titreşim hissi genellikle düzgün, keskin ve nüfuz edici olarak tanımlanır.
- Diğer LRA modellerinin rezonans frekansları yaklaşık 150 Hz'dir. Bu modellerin verdiği his, nitelik açısından daha yumuşak ve daha dolgundur (boyut olarak).
İki farklı frekansta aynı giriş voltajı verildiğinde titreşim çıkış genlikleri farklı olabilir. Frekans, LRA'nın rezonans frekansından ne kadar uzaksa titreşim genliği o kadar düşük olur.
Belirli bir cihazın dokunma etkileri hem titreşim aktüatörünü hem de sürücüsünü kullanır. Aşırı hız ve aktif frenleme özellikleri içeren dokunsal sürücüler, LRA'ların yükselme süresini ve zil sesini azaltarak daha duyarlı ve net bir titreşim sağlar.
Cihazlarda varsayılan dalga sönümleme
Özel bir dalga biçimi deseninin genel bir cihazda nasıl davrandığını açıklamak için aşağıdakileri göz önünde bulundurun:
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));
Aşağıdaki grafiklerde, önceki kod snippet'lerine karşılık gelen giriş dalga biçimi ve çıkış ivmesi gösterilmektedir. Desende genlikte ani bir değişiklik olduğunda (yani 0 ms, 150 ms, 200 ms, 250 ms ve 700 ms'de) ivmenin aniden değil, kademeli olarak arttığını unutmayın. Ayrıca, her bir adım amplitüdü değişikliğinde aşırı aşma vardır ve giriş amplitüdü aniden 0'a düştüğünde en az 50 ms süren görünür bir zil sesi vardır.
İyileştirilmiş dokunma deseni
Aşırı aşmayı önlemek ve zil çalmasını azaltmak için genlikleri daha kademeli olarak değiştirin. Aşağıda, düzeltilen sürümün dalga biçimi ve hızlandırma çizelgeleri gösterilmektedir:
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));
Daha karmaşık dokunma efektleri oluşturma
Tatmin edici bir tıklama yanıtındaki diğer öğeler daha karmaşıktır ve cihazda kullanılan LRA hakkında bilgi sahibi olmayı gerektirir. En iyi sonuçlar için cihazın önceden oluşturulmuş dalga formlarını ve platform tarafından sağlanan sabitleri kullanın. Bu sayede şunları yapabilirsiniz:
- Net efektler ve ilkel öğeler kullanın.
- Yeni dokunma etkileri oluşturmak için bunları birleştirin.
Bu önceden tanımlanmış dokunma sabitleri ve primitifleri, yüksek kaliteli dokunma efektleri oluştururken işinizi büyük ölçüde hızlandırabilir.