Haptikler etrafında oluşturulan tüm Android çerçeve geliştirmeleri, eşit oranda gelişen bir dizi UX ilkesi tarafından yönlendirilir. Mevcut ilkeler, vızıldayan titreşimi net haptiklerle değiştirmeyi ve zengin haptikleri keşfetmeyi içerir.
Şekil 1. Mevcut ilkeler
Aşağıdaki tablo, kullanılabilir tüm haptik API'lerini listeler.
API | yöntemler | Yıl eklendi |
---|---|---|
android.view.HapticFeedbackSabitler |
| 2016'dan önce |
| 2017 (Android 8) | |
| 2020 (Android 11) | |
android.Görünüm |
| 2016'dan önce |
android.os.Vibratör |
| 2016'dan önce |
| 2017 (Android 8) | |
| 2020 (Android 11) | |
android.os.Titreşim Etkisi |
| 2017 (Android 8) |
| 2019 (Android 10) | |
android.os.VibrationEffect.Composition |
| 2020 (Android 11) |
android.media.AudioAttributes.Builder |
| 2019 (Android 10) |
Buzzy titreşim
Çağrı cihazlarına ve özellikli telefonlara kadar uzanan, düşük kaliteli ancak güç açısından verimli ERM zil tabanlı titreşimler, sessiz modda işitsel zil sesinin yerine kullanılmıştır. Yüksek ve rahatsız edici duyulabilir sesler üreten eski donanım bileşenleri, düşük kaliteli izlenimler (örneğin, ucuz, bozuk bir telefon) sunarak dokunsal UX'e zarar verebilir.
Haptikleri temizle
Net haptikler , ayrı durum değişikliklerinin algılanmasını destekler (örneğin, güç açma/kapama işlemi sırasında ikili değişiklikler). Ayrık uygunluğun doğası gereği, net haptikler tek bir varlık olarak üretilir (örneğin, bir girdi olayı başına bir haptik etki).
Android, vızıltılı veya duygusal duyumlar yerine güçlü ancak keskin duyumlar içeren net haptikler sunmayı amaçlar.
Net haptikleri desteklemek için oluşturulan önceden tanımlanmış dokunsal sabitler aşağıdakileri içerir.
-
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
-
EFFECT_CLICK
-
EFFECT_DOUBLE_CLICK
-
EFFECT_HEAVY_CLICK
-
EFFECT_TICK
Cihaz üreticileri ve geliştiriciler arasında ortak bilgi birikimi oluşturmak, Android ekosistemindeki genel haptik kalitesini yükseltmenin anahtarıdır. Temel kontrol listesini , donanım değerlendirmesini ve CDD'yi kullanın. dokunsal uygulama hakkında daha fazla bilgi edinmek için.
Şekil 3. Basma ve bırakma.
Zengin haptikler
Zengin haptikler , tek bir dürtüye dayalı etkilerin ötesine geçen büyüyen bir haptik kategorisidir. Android, yüksek düzeyde birleştirilebilirlik ve ince bir ayrıntı düzeyi ile ayarlanabilirlik ile zengin haptikleri desteklemeyi amaçlar. Aşağıdaki kullanım durumları Android 11 veya önceki sürümlerde desteklenir.
Şekil 4. Kayan dokulu zengin haptikler
Şekil 5. Sürükleme ve kaydırma
Kullanım durumu 1: Kayan doku
Parmak bir dokunmatik yüzey üzerinde kayarken (örneğin, sürükleme, kaydırma, hayali dokunsal doku ile yüzeyi keşfetme) bir haptik etki tekrarlanırsa, yinelenen haptik etkiler tercihen keskin ve incedir.
Bireysel efekt net değil de buz gibiyse, tekrarlar arasındaki aralıklar muhtemelen silinecektir. Sonuç, çoklu ayrık sinyaller yerine tek bir uzun vızıltıdır.
Genlik yeterince süptil değilse, algılanan haptik enerji tekrarlama yoluyla birikir ve tekrarın sonunda ezici bir şekilde güçlü haptiklerle sonuçlanır.
Kaydırma ve sürükleme hareketleri için basit bir yüzey dokunsal dokusu uygulamak
HapticFeedbackConstants içinde CLOCK_TICK
ve TEXT_HANDLE_MOVE
HapticFeedbackConstants
. Bu sabitler, tekrar ve genliğin özelliklerini önceden tanımlar.
Kendi efektinizi yaratmak
Kendi efektinizi yaratmak için, VibrationEffect.Composition
içinde PRIMITIVE_CLICK
ve PRIMITIVE_TICK
dizilerini bir araya getirerek bir tasarım oluşturun. addPrimitive(int primitiveID, float scale, int delay)
kullanarak tekrar ve genlik ölçeğinin özelliklerini ayarlayabilirsiniz. Destek, Vibratör HAL Arabiriminin CAP_COMPOSE_EFFECTS
yeteneğine dayanır.
Kullanım durumu 2: Kolaylaştırma etkisi ile uzun titreşim
Uzun titreşim, 0'dan hedef genliğe geçiş yapan düzgün genlikli bir titreşimdir. Uzun titreşim, kolayca algılanabilen dikkat haptikleri üretebilir. Ancak, sessiz bir ortamda ani ve uzun süreli bir titreşim kullanıcıları ürkütebilir ve genellikle duyulabilir uğultu sesleri üretir. Daha hoş bir uzun titreşim oluşturmak için, uzun titreşimin başlangıcında kolaylık efektini uygulayın. Bu, hedef genliğe doğru oluşan yumuşak bir genlik geçişi üretir.
Kolaylaştırma efektini uygulama
android.os.Vibrator.hasAmplitudeControl()
ile genlik kontrolünün donanım özelliklerini kontrol edin.- Değişken genlik ile kolaylık etkisi üretmek için sonucun
true
olması gerekir.
- Değişken genlik ile kolaylık etkisi üretmek için sonucun
VibrationEffect
kullanın.createWaveform(timings[], amplitudes[], int repeat)
.Şekil 6'da gösterildiği gibi, kolaylık eğrisini oluşturmak için
timings[]
veamplitudes[]
serilerini ayarlayın.
Şekil 6. Uzun titreşim kolaylığı eğrisi
Kullanım durumu 3: Sesle birleştirilmiş haptikler
Sesle birleştirilmiş haptikler , kullanıcının dikkatini çekmek için sesin ritmiyle birleştirilmiş dokunsal kalıplardır.
Ses bağlantılı haptikler: Avantajlar
Ses bağlantılı haptikleri uygulamak için net haptikleri uzun titreşimlerle birleştirin. Net haptiklerden gelen güçlü ama kısa dokunsal duyumlar, ayrı ritmik modeller sunar. Uzun titreşimin sağladığı yüksek düzeyde uyaranlarla birleştirildiğinde, bu, kullanıcının dikkatini çekmek için harika bir iş çıkarır.
Duyum ritmik kalıplarını dikkate almak önemlidir. Ritim duygusu yoksa, kullanıcı dokunsal duyuları rastgele vızıltılar olarak algılar ve onları görmezden gelme eğilimindedir.
Şekil 7. Ses çifti haptik örneği
Ses bağlantılı haptikler: Uygulamaya yönelik ipuçları
Sesle eşleştirilmiş haptiklerin uygulanması, hem ses hem de dokunsal kanalların içerik oynatımına ilişkin temel bir anlayış gerektirir. Aşağıdakileri aklınızda bulundurun.
MediaPlayer
veyaSoundPool
sınıflarını kullanın.- Özel bir meta veri anahtarına sahip OGG biçimindeki varlıklar (
ANDROID_HAPTIC
ardından bir dizi dokunsal kanal), dokunsal verilerin varlığını veMediaPlayer
veSoundPool
ile oynatmayı gösterir.
- Özel bir meta veri anahtarına sahip OGG biçimindeki varlıklar (
audio_policy_configuration.xml
içinde dokunma ve ses çalma desteğini belirtin.-
AUDIO_CHANNEL_OUT_HAPTIC_A|B
haptik kanalıyla bir çıktı profili kullanın. - Haptik kanalları olan bir çıktı akışı için, haptik kanalların verilerde ekstra kanallar olarak sunulduğunu unutmayın.
Örnek
Çıkış akışı için kanal maskesi şöyle görünüyorsa:
AUDIO_CHANNEL_OUT_STEREO_HAPTIC_A
O zaman her örnek şöyle görünmelidir:
AUDIO_LEFT_CHANNEL,AUDIO_RIGHT_CHANNEL,HAPTIC_CHANNEL_A
-
AudioAttributes.Builder( ).setHapticChannelsMuted(boolean muted)
değiştirindokunsal kanalı oynatmak için
false
yapın.- Varsayılan olarak, dokunsal kanalların sesi kapatılır (
true
). - Kullanım durumları, senkronize dokunma ve geri bildirim ile zil sesleri ve kullanıcı arayüzü seslerini içerir.
- Varsayılan olarak, dokunsal kanalların sesi kapatılır (
Vibratör HAL, harici kontrol desteği uygulamalıdır.
- HIDL uygulamaları için
setExternalControl(bool enabled) generates (Status status)
kullanın. - AIDL uygulamaları için
void setExternalControl(in boolean enabled)
kullanın.
- HIDL uygulamaları için
Şekil 8. Sesle birleştirilmiş haptiklerin uygulanması
Ses bağlantılı haptikler: Haptic Generator
HapticGenerator
, bir ses kanalından dokunsal veri oluşturabilen ve bunu gerçek zamanlı olarak ses bağlantılı haptikler olarak çalabilen, Android 12'de tanıtılan bir Ses Efektidir. Efekt, AudioTrack
Şekil 9'da açıklandığı gibi uygulanır.
Şekil 9. Haptic Generator mimarisi
Haptik üreteci algoritmanızın yüksek kaliteli haptikler ürettiğinden emin olmak için, ses dalga formlarına uyguladığı filtre zincirini yapılandıran parametreleri ayarlayarak oluşturma algoritmasını cihaz vibratör motoruna ayarlayın. Bu bölüm, bu parametreleri ayrıntılı olarak açıklar ve bunları donanım özelliklerine göre nasıl ayarlayacağınızı açıklar.
Bant geçiren filtre için rezonans frekansı
Vibratör rezonans frekansı, bir haptik aktüatörün maksimum çıktıya sahip olduğu frekanstır. Bu parametre, daha geniş bir bant genişliği elde etmek için yanıt aktarım işlevini kısmen düzleştirmek için bir anti-rezonatörü ayarlar. Android çerçevesi bu değeri otomatik olarak Vibrator HAL yöntemi
IVibrator.getResonantFrequency
.Bu parametre için varsayılan değer 150Hz'dir . Bu, buradaki kodda değiştirilebilir.
Yavaş zarf için normalleştirme gücü
Bu parametre, kısmi normalizasyonda (otomatik kazanç kontrolü) üssü belirler. Varsayılan değeri -0.8'dir , bu, dinamik aralık varyasyonunun %80'inin bu kazanç kontrol adımı tarafından kaldırıldığı anlamına gelir. Bu, buradaki kodda değiştirilebilir.
Bant durdurma filtresi için Q faktörü
Vibratör kalite faktörü (Q faktörü) iki parametre ile belirlenir:
Sıfır Q, rezonansı kısmen iptal eden bant durdurma filtresindeki sıfırların kalite faktörü.
Kutup Q, bant durdurma filtresindeki kutupların kalite faktörü.
Bu iki değerin oranı, daha düşük frekansları artırmak ve algoritma yanıtını genişletmek için rezonansın bastırılmasını sınırlar. Örneğin, Sıfır Q için varsayılan 8 ve Kutup Q için 4 olan varsayılan değerler, 2'lik bir oran üretir ve rezonans bastırmayı 2 (6 dB) faktörle sınırlar. Android çerçevesi, her iki değeri de Vibrator HAL yönteminin
IVibrator.getQFactor
.Varsayılan değerler, cihazınızdaki motor gücünün sönümlenmesini hesaba katmıyorsa, her iki değeri aynı anda değiştirmenizi ve her ikisini de artırmanızı veya azaltmanızı öneririz. Sıfır Q'nun Kutup Q'ya oranı 1'den büyük olmalıdır. Bu, buradaki kodda değiştirilebilir.
Bozulma için köşe frekansı
Köşe frekansı, düşük seviyeli titreşimi bastıran ve kübik distorsiyon kullanarak daha yüksek seviyeleri artıran bir alçak geçiren filtre tarafından uygulanır. Varsayılan olarak 300Hz'dir . Bu, buradaki kodda değiştirilebilir.
Bozulma için giriş kazancı ve küp eşiği
Bu parametreler, düşük frekanslı sinyallerin genliğini azaltan ve yüksek frekanslı olanları artıran giriş dalga biçimine uygulanan doğrusal olmayan bir bozulma filtresi tarafından kullanılır.
- Giriş kazanç faktörü için varsayılan değer 0,3'tür .
- Küp eşiği için varsayılan değer 0,1'dir .
Her iki değeri birlikte değiştirmenizi öneririz. Buradaki kodda bulunabilirler.
Bu filtre tarafından uygulanan işlev hakkında daha fazla bilgi için burada bulunan uygulamaya bakın. Bu iki parametrenin çıktıyı nasıl etkilediği hakkında daha fazla bilgi edinmek için filtrelerin frekans yanıtlarını çizmenizi ve farklı parametre değerleriyle frekans yanıtlarının nasıl değiştiğini gözlemlemenizi öneririz.
Bozulma için çıkış kazancı
Bu parametre, son titreşim genliğini kontrol eder. Titreşim genliklerini 1'in altına sınırlayan bir yumuşak sınırlayıcıdan sonra uygulanan son kazançtır. Varsayılan değeri 1.5'tir ve buradaki kodda değiştirilebilir. Titreşim çok hafifse değeri artırın. Aktüatör donanımının tıkırtısını duyabiliyorsanız, değeri azaltın.