Dokunsal geri bildirimler etrafında oluşturulan tüm Android çerçeve iyileştirmeleri, eşit oranda gelişen bir dizi kullanıcı deneyimi ilkesine dayanır. Mevcut ilkeler, titreşimli dokunma yerine net dokunma özelliğini kullanmayı ve zengin dokunma özelliğini keşfetmeyi içerir.
1. şekil. Mevcut ilkeler.
Aşağıdaki tabloda, kullanılabilen tüm dokunsal API'ler listelenmiştir:
API | Yöntemler ve sabitler | Eklendiği yıl |
---|---|---|
android.view.HapticFeedbackConstants |
|
2016'dan önce |
|
2017 (Android 8) | |
|
2020 (Android 11) | |
android.View |
|
2016'dan önce |
android.os.Vibrator |
|
2016'dan önce |
|
2017 (Android 8) | |
|
2020 (Android 11) | |
android.os.VibrationEffect |
|
2017 (Android 8) |
|
2019 (Android 10) | |
android.os.VibrationEffect.Composition |
|
2020 (Android 11) |
android.media.AudioAttributes.Builder |
|
2019 (Android 10) |
Buzzy titreşimi
Çağrı cihazları ve özellikli telefonlardan beri, düşük kaliteli ancak enerji açısından verimli olan eksantrik dönen kütle (ERM) buzzer tabanlı titreşimler, sessiz modda işitsel zil sesinin yerine kullanılmıştır. Yüksek ve rahatsız edici sesler üreten eski donanım bileşenleri, düşük kaliteli izlenimler sunarak (ör. ucuz ve bozuk bir telefon) dokunsal kullanıcı deneyimine zarar verebilir.
Dokunma teknolojisini temizleme
Net dokunsal geri bildirimler, ayrı durum değişiklikleri (ör. açma ve kapatma işlemi sırasında ikili değişiklikler) hissini destekler. Ayrı etkileşim fırsatının doğası gereği, net dokunsal geri bildirimler tek bir öğe olarak oluşturulur (ör. giriş etkinliği başına bir dokunsal efekt).
Android, titreşimli veya yumuşak hisler yerine güçlü ancak keskin hisler veren net dokunsal geri bildirimler sunmayı amaçlar.
Net dokunsal geri bildirimi desteklemek için oluşturulan önceden tanımlanmış dokunsal sabitler aşağıdaki öğeleri içerir.
İçinde
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
İçinde
VibrationEffect
:
EFFECT_CLICK
EFFECT_DOUBLE_CLICK
EFFECT_HEAVY_CLICK
EFFECT_TICK
Cihaz üreticileri ve geliştiriciler arasında ortak bilgi oluşturmak, Android ekosistemindeki dokunsal geri bildirimin genel kalitesini artırmak için çok önemlidir. Dokunsal uygulama hakkında daha fazla bilgi edinmek için temel kontrol listesini, donanım değerlendirmesini ve CDD'yi kullanın.
Şekil 2. Basma ve bırakma
Zengin dokunma teknolojisi
Zengin dokunsal geri bildirim, tek bir darbeye dayalı efektlerin ötesine geçen ve büyüyen bir dokunsal geri bildirim kategorisidir. Android, yüksek birleştirilebilirlik ve ince ayrıntı düzeyinde ayarlanabilirlik ile zengin dokunsal geri bildirimleri desteklemeyi amaçlar. Aşağıdaki kullanım alanları Android 11 veya önceki sürümlerde desteklenir.
3.Şekil Kayar dokulu zengin dokunma teknolojisi.
Şekil 4. Sürükleme ve kaydırma
1. kullanım alanı: Kaydırma dokusu
Parmak dokunmatik yüzeyde kaydırılırken (ör. sürükleme, kaydırma, yüzeyi hayali dokunsal dokuyla keşfetme) dokunsal efekt tekrarlanırsa tekrarlanan dokunsal efektler tercihen net ve ince olmalıdır.
Bireysel efekt net değil de cızırtılıysa tekrarlar arasındaki aralıklar silinir. Sonuç, birden fazla ayrı sinyal yerine tek bir uzun vızıltıdır.
Titreşim yeterince hafif değilse algılanan dokunsal enerji, tekrarlama yoluyla artar ve tekrarlama sonunda aşırı derecede güçlü dokunsal geri bildirimler ortaya çıkar.
Kaydırma ve sürükleme hareketleri için yüzey dokunsal dokusu uygulama
HapticFeedbackConstants
uygulamasında CLOCK_TICK
ve TEXT_HANDLE_MOVE
özelliğini kullanın.
Bu sabitler, tekrar ve genlik özelliklerini önceden tanımlar.
Kendi efektinizi oluşturma
Kendi efektinizi oluşturmak için VibrationEffect.Composition
'de PRIMITIVE_CLICK
ve PRIMITIVE_TICK
dizilerini bir araya getirerek bir tasarım oluşturun.
Tekrar ve genlik ölçeğinin özelliklerini addPrimitive(int primitiveID, float scale, int delay)
kullanarak ayarlayabilirsiniz. Destek, Vibrator HAL Arayüzü'nün CAP_COMPOSE_EFFECTS
özelliğine bağlıdır.
2. kullanım alanı: Kolay giriş efektli uzun titreşim
Uzun titreşim, 0'dan hedef genliğe geçiş yapan düzgün bir genlik titreşimidir. Uzun titreşim, algılanabilir dikkat çekici dokunsal uyarılar oluşturabilir. Ancak, sessiz bir ortamda uzun süren titreşimler kullanıcıları korkutabilir ve genellikle duyulabilir vızıltı sesleri çıkarır. Daha hoş bir uzun titreşim oluşturmak için uzun titreşimin başında kolaylaştırma efektini uygulayın. Bu, hedef genliğe doğru ilerleyen düzgün bir genlik geçişi üretir.
Yavaş başlama efektini uygulama
android.os.Vibrator.hasAmplitudeControl()
ile genlik kontrolünün donanım özelliklerini kontrol edin.- Sonuç, değişen genlikte kolay giriş efekti oluşturmak için
true
olmalıdır.
- Sonuç, değişen genlikte kolay giriş efekti oluşturmak için
VibrationEffect
kullanın.createWaveform(timings[], amplitudes[], int repeat)
.Şekil 5'te gösterildiği gibi,
timings[]
veamplitudes[]
serisini ayarlayarak kolay giriş eğrisini oluşturun.
5.şekil Uzun titreşimli kolay giriş eğrisi.
3. kullanım alanı: Sesle bağlantılı dokunma teknolojisi
Sesle bağlantılı dokunsal geri bildirimler, kullanıcının dikkatini çekmek için sesin ritmiyle bağlantılı dokunsal desenlerdir.
Sesle bağlantılı dokunma teknolojisi: Avantajları
Sesle bağlantılı dokunsal geri bildirimi uygulamak için net dokunsal geri bildirimi uzun titreşimlerle birleştirin. Net dokunsal geri bildirimlerin güçlü ancak kısa dokunsal hisleri, ayrı ritmik desenler sunar. Uzun titreşimin sağladığı yüksek uyarı seviyeleriyle birleştiğinde bu özellik, kullanıcının dikkatini çekmek için harika bir yöntemdir.
Ritmik duygu kalıplarını göz önünde bulundurmak önemlidir. Ritim duygusu yoksa kullanıcı, dokunsal hisleri rastgele titreşimler olarak algılar ve bunları göz ardı etme eğiliminde olur.
6.şekil Sesli çift dokunsal örnek.
Sesle bağlantılı dokunma teknolojisi: Uygulama ipuçları
Sesle bağlantılı dokunsal geri bildirimi uygulamak için hem ses hem de dokunsal kanalların içerik oynatımıyla ilgili temel düzeyde bilgi sahibi olmanız gerekir. Aşağıdaki noktaları göz önünde bulundurun:
MediaPlayer
veyaSoundPool
sınıflarını kullanın.- Özel bir meta veri anahtarı (
ANDROID_HAPTIC
ve ardından bir dizi dokunsal kanal) içeren OGG biçimindeki öğeler, dokunsal verilerin varlığını veMediaPlayer
ileSoundPool
kullanılarak oynatıldığını gösterir.
- Özel bir meta veri anahtarı (
audio_policy_configuration.xml
içinde dokunma teknolojisi ve ses oynatma desteğini belirtin.- Dokunma teknolojisi kanalı içeren bir çıkış profili kullanın
AUDIO_CHANNEL_OUT_HAPTIC_A|B
. - Dokunsal kanalları olan bir çıkış akışında, dokunsal kanalların verilerde ek kanal olarak sunulduğunu unutmayın.
Örnek
Çıkış akışının kanal maskesi şu şekildeyse:
AUDIO_CHANNEL_OUT_STEREO_HAPTIC_A
Ardından her örnek aşağıdaki gibi görünmelidir:
AUDIO_LEFT_CHANNEL,AUDIO_RIGHT_CHANNEL,HAPTIC_CHANNEL_A
- Dokunma teknolojisi kanalı içeren bir çıkış profili kullanın
Dokunsal kanalı oynatmak için
AudioAttributes.Builder( ).setHapticChannelsMuted(boolean muted)
değerinifalse
olarak değiştirin.- Dokunsal kanallar varsayılan olarak sessize alınır (
true
). - Kullanım alanları arasında, senkronize dokunsal geri bildirim ve geri bildirim içeren zil sesleri ve kullanıcı arayüzü sesleri yer alır.
- Dokunsal kanallar varsayılan olarak sessize alınır (
Vibrator 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 7. Sesle bağlantılı dokunsal geri bildirimi uygulama
Sesle bağlantılı dokunma teknolojisi: HapticGenerator
HapticGenerator
, Android 12'de kullanıma sunulan bir ses efektidir. Bu efekt, bir ses kanalından dokunsal veriler oluşturabilir ve bunları sesle bağlantılı dokunsal geri bildirim olarak gerçek zamanlı oynatabilir. Efekt, Şekil 8'de gösterildiği gibi AudioTrack
öğesine uygulanır:
Şekil 8. Dokunsal geri bildirim oluşturucu mimarisi.
Bu mimari görselleştirme, Haptic Generator'ın gelen kullanıcı ses akışına nerede uygulandığını gösterir. Bu işlem, ses akışı Audio HAL'ye gönderilmeden önce gerçekleşir. Jeneratör, AudioMixer
ses ve dokunsal verileri böldükten sonra ve diğer ses efektlerinden önce uygulanır. Jeneratörün çıkışı, akıştaki önceki dokunsal verilerin yerini alır.
Dokunsal geri bildirim üretme algoritmanızın yüksek kaliteli dokunsal geri bildirimler ürettiğinden emin olmak için, ses dalga biçimlerine uyguladığı filtre zincirini yapılandıran parametreleri ayarlayarak üretim algoritmasını cihaz titreşim motoruna göre düzenleyin. Bu bölümde, söz konusu parametreler ayrıntılı olarak açıklanmakta ve donanım spesifikasyonunuza göre nasıl ayarlanacağı anlatılmaktadır.
Bant geçiren filtre için rezonans frekansı
Titreşim motorunun rezonans frekansı, dokunsal aktüatörün maksimum çıkışa 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 üzere bir anti-rezonatörü ayarlar. Android çerçevesi, bu değeri Vibrator HAL yönteminin
IVibrator.getResonantFrequency
çıkışıyla otomatik olarak bağlar.Bu parametrenin varsayılan değeri 150 Hz'dir. Bu değeri kodda değiştirebilirsiniz.
Yavaş zarf için normalleştirme gücü
Bu parametre, kısmi normalleştirme (otomatik kazanç kontrolü) işlemindeki üssü belirler. Varsayılan değeri -0,8'dir.Bu, dinamik aralık varyasyonunun% 80'inin bu kazanç kontrolü adımıyla kaldırıldığı anlamına gelir. Bunu kodda değiştirebilirsiniz.
Bant durdurma filtresi için Q faktörü
Titreşim motorunun kalite faktörü (Q faktörü) iki parametreye göre belirlenir:
The Zero Q, bant durdurma filtresindeki sıfırların kalite faktörü. Bu faktör, rezonansı kısmen iptal eder.
Pole 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, Zero Q için 8 ve Pole Q için 4 varsayılan değerleri 2 oranını oluşturarak rezonans bastırmayı 2 kat (6 dB) sınırlar. Android çerçevesi, her iki değeri de Vibrator HAL yönteminin
IVibrator.getQFactor
çıkışına bağlar.Varsayılan değerler, cihazınızdaki motor gücünün azalmasını hesaba katmıyorsa her iki değeri de aynı anda değiştirmenizi ve her ikisini de artırmanızı ya da azaltmanızı öneririz. Sıfır Q'nun kutup Q'ya oranı 1'den büyük olmalıdır. Bunu kodda değiştirebilirsiniz.
Bozulma için köşe frekansı
Köşe frekansı, düşük seviyeli titreşimi bastıran ve kübik bozulma kullanarak daha yüksek seviyeleri artıran bir alçak geçiren filtre tarafından uygulanır. Varsayılan olarak 300 Hz'dir. Bunu kodda değiştirebilirsiniz.
Bozulma için giriş kazancı ve küp eşiği
Bu parametreler, giriş dalga biçimine uygulanan doğrusal olmayan bozulma filtresi tarafından kullanılır. Bu filtre, düşük frekanslı sinyallerin genliğini azaltır ve yüksek frekanslı sinyallerin genliğini artırır.
- Giriş kazancı faktörünün varsayılan değeri 0,3'tür.
- Küpe eşiği için varsayılan değer 0,1'dir.
Her iki değeri de birlikte değiştirmenizi öneririz. Bunları kodda bulabilirsiniz.
Bu filtre tarafından uygulanan işlev hakkında daha fazla bilgi için kod içindeki uygulamaya bakın.
Bu iki parametrenin çıkışı nasıl etkilediği hakkında daha fazla bilgi edinmek için filtrelerin frekans yanıtlarını çizmenizi ve frekans yanıtlarının farklı parametre değerleriyle 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'den daha az olacak şekilde sınırlayan yumuşak sınırlayıcıdan sonra uygulanan son kazançtır. Varsayılan değeri 1, 5'tir ve bunu kodda değiştirebilirsiniz.
Titreşim çok zayıfsa değeri artırın. Aktüatör donanımının tıkırtı sesini duyuyorsanız değeri düşürün.