Dokunma duyusuna dayalı tüm Android çerçeve iyileştirmeleri, eşit hızda gelişen bir dizi kullanıcı deneyimi ilkesinden yararlanır. Mevcut ilkeler, bulantılı titreşimin net dokunma teknolojisi ile değiştirilmesini ve zengin dokunma teknolojisinin keşfedilmesini içeriyor.
Şekil 1. Mevcut ilkeler
Aşağıdaki tabloda mevcut tüm dokunma teknolojisi API'leri listelenmektedir.
API | Yöntemler | 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.TitreşimEfekti |
|
2017 (Android 8) |
|
2019 (Android 10) | |
android.os.VibrationEffect.Composition |
|
2020 (Android 11) |
android.media.AudioAttributes.Builder |
|
2019 (Android 10) |
Vızıltılı titreşim
Çağrı cihazları ve özellikli telefonları temel alan düşük kaliteli ancak güç verimli ERM buzzer tabanlı titreşimler, sessiz modda işitsel çalmanın alternatifi olarak kullanılmıştır. Yüksek ve rahatsız edici sesler çıkaran eski donanım bileşenleri, düşük kaliteli gösterimler (ör. ucuz, bozuk bir telefon) sunarak dokunsal kullanıcı deneyimine zarar verebilir.
Net dokunma
Net dokunma teknolojisi, ayrı durum değişiklikleri hissini (örneğin, açma/kapatma işlemi sırasında gerçekleşen ikili değişiklikler) destekler. Sayısal olanağın yapısı nedeniyle net dokunma hissi tek bir varlık olarak oluşturulur (ör. bir giriş etkinliği başına bir dokunma hissi).
Android, titreşimli veya yumuşak hisler yerine güçlü ve keskin hisler sunmayı amaçlar.
Net dokunma hissini desteklemek için oluşturulan önceden tanımlanmış dokunma sabitleri şunlardır:
HapticFeedbackConstants
içinde:
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
VibrationEffect
'de:
EFFECT_CLICK
EFFECT_DOUBLE_CLICK
EFFECT_HEAVY_CLICK
EFFECT_TICK
Cihaz üreticileri ile geliştiriciler arasında ortak bilgi oluşturmak, Android ekosistemindeki dokunma teknolojisinin genel kalitesini artırmanın anahtarıdır. Dokunsal uygulama hakkında daha fazla bilgi edinmek için temel yapılacaklar listesini, donanım değerlendirmesini ve CDD'yi kullanın.
Şekil 3. Basıp bırakma.
Zengin dokunma teknolojisi
Zengin dokunma, tek darbeye dayalı efektlerin ötesine geçen, büyüyen bir dokunma kategorisidir. Android, yüksek düzeyde birleştirilebilirlik ve hassas ayrıntı düzeyinde ayarlanabilirlik sunan zengin dokunma teknolojisini desteklemeyi amaçlar. Aşağıdaki kullanım alanları Android 11 veya önceki sürümlerde desteklenir.
Şekil 4. Kayan doku ile zengin dokunma teknolojisi
Şekil 5. Sürükleme ve kaydırma
1. kullanım alanı: Kaydırılabilir doku
Parmak bir dokunmatik yüzey üzerinde kayarken tekrarlanan dokunma etkileri (ör. sürükleme, kaydırma, yüzeyi hayali dokunma dokusuyla keşfetme) tercihen net ve ince olmalıdır.
Tek bir etki keskin değil de canlıysa tekrarlar arasındaki aralıklar büyük olasılıkla ortadan kalkar. Sonuç olarak, birden fazla ayrı sinyal yerine tek bir uzun uğultu elde edilir.
Genişlik yeterince açık değilse, algılanan dokunma teknolojisi, tekrarlar aracılığıyla yükselir ve tekrarın sonunda son derece güçlü bir dokunma teknolojisine yol açar.
Kaydırma ve sürükleme hareketleri için basit bir yüzey dokunma dokusu uygulama
HapticFeedbackConstants
'te CLOCK_TICK
ve TEXT_HANDLE_MOVE
kullanın.
Bu sabitler, tekrar ve genlik özelliklerini önceden tanımlar.
Kendi efektinizi oluşturun
Kendi efektinizi oluşturmak için VibrationEffect.Composition
içinde PRIMITIVE_CLICK
ve PRIMITIVE_TICK
sıralarını birbirine bağlayarak bir tasarım oluşturun.
addPrimitive(int primitiveID, float scale, int delay)
simgesini kullanarak tekrar ve genlik ölçeğinin özelliklerini ayarlayabilirsiniz. Destek, Vibrator HAL Arayüzü'nün CAP_COMPOSE_EFFECTS
özelliğine dayanır.
2. kullanım alanı: Yavaşça başlayan uzun titreşim
Uzun titreşim, 0'dan hedef genliğe geçiş yapan yumuşak bir genlik titreşimidir. Uzun titreşimler, dikkati çeken kolayca algılanabilir dokunma hisleri oluşturabilir. Ancak ani ve uzun bir titreşim, sessiz bir ortamda kullanıcıları korkutabilir ve genellikle sesli bir vızıltı sesi çıkarır. Daha keyifli bir uzun titreşim oluşturmak için uzun titreşimin başına yavaşça başlama efekti uygulayın. Bu, hedef genliğe doğru ilerleyen yumuşak bir genlik geçişi oluşturur.
Yavaş yavaş başlama efekti uygulama
android.os.Vibrator.hasAmplitudeControl()
ile genlik kontrolünün donanım özelliklerini kontrol edin.- Değişen genlikle yumuşak başlangıç efekti oluşturmak için sonucun
true
olması gerekir.
- Değişen genlikle yumuşak başlangıç efekti oluşturmak için sonucun
VibrationEffect
simgesini kullanın.createWaveform(timings[], amplitudes[], int repeat)
.Şekil 6'da gösterildiği gibi,
timings[]
veamplitudes[]
serisini ayarlayarak yumuşak başlangıç eğrisi oluşturun.
Şekil 6. Uzun titreşimde yavaşça başlama eğrisi
3. kullanım alanı: Sesle senkronize dokunma teknolojisi
Sesle eşlenen dokunma, kullanıcının dikkatini çekmek için sesin ritmiyle eşlenen dokunma kalıplarıdır.
Ses bağlantılı dokunma teknolojisi: Avantajları
Sesle eşlenen dokunma teknolojisini uygulamak için net dokunma teknolojisini uzun titreşimlerle birleştirin. Net dokunma teknolojisinden elde edilen güçlü ama kısa dokunma teknolojisi, ayrı ritmik desenler sunar. Uzun titreşimin sağladığı yüksek düzeyde uyarımla birlikte bu, kullanıcının dikkatini çekme konusunda mükemmel bir iş çıkarır.
Sansasyon ritmik kalıplarını göz önünde bulundurmak önemlidir. Ritim hissi yoksa kullanıcı, dokunma hislerini rastgele titreşimler olarak algılar ve bunları görmezden gelir.
Şekil 7. Sesli dokunma çifti örneği
Sesle senkronize haptik: Uygulamayla ilgili ipuçları
Sesle eşleştirilmiş dokunma teknolojisini uygulamak için hem ses hem de dokunma kanallarında içerik oynatma hakkında temel düzeyde bilgi sahibi olmanız gerekir. Aşağıdakileri göz önünde bulundurun.
MediaPlayer
veyaSoundPool
sınıflarını kullanın.- Özel meta veri anahtarına (
ANDROID_HAPTIC
ve ardından çeşitli dokunma teknolojisi kanalları) sahip OGG biçimindeki öğeler,MediaPlayer
veSoundPool
ile dokunma teknolojisi verilerinin ve oynatmanın varlığını gösterir.
- Özel meta veri anahtarına (
audio_policy_configuration.xml
'te dokunma ve ses oynatma desteğini belirtin.- Dokunma teknolojisi kanalıyla çıkış profili kullanın
AUDIO_CHANNEL_OUT_HAPTIC_A|B
. - Dokunma kanalları içeren bir çıkış akışında, dokunma kanallarının verilerde ek kanallar olarak sunulduğunu unutmayın.
Örnek
Çıkış akışı için kanal maskesi şöyle görünüyorsa:
AUDIO_CHANNEL_OUT_STEREO_HAPTIC_A
Bu durumda her örnek aşağıdaki gibi görünmelidir:
AUDIO_LEFT_CHANNEL,AUDIO_RIGHT_CHANNEL,HAPTIC_CHANNEL_A
- Dokunma teknolojisi kanalıyla çıkış profili kullanın
Dokunma kanalını oynatmak için
AudioAttributes.Builder( ).setHapticChannelsMuted(boolean muted)
değerinifalse
olarak değiştirin.- Dokunma kanalları varsayılan olarak sessizdir (
true
). - Kullanım alanları arasında senkronize dokunma ve geri bildirim içeren zil sesleri ve kullanıcı arayüzü sesleri yer alır.
- Dokunma kanalları varsayılan olarak sessizdir (
Titreşim HAL'i harici kontrol desteğini uygulamalıdır.
- HIDL uygulamaları için
setExternalControl(bool enabled) generates (Status status)
kullanın. - AIDL uygulamaları için
void setExternalControl(in boolean enabled)
seçeneğini kullanın.
- HIDL uygulamaları için
Şekil 8. Sesle bağlantılı dokunma teknolojisi uygulama
Sesle senkronize dokunma teknolojisi: Dokunma Teknolojisi Oluşturucu
HapticGenerator
, Android 12'de kullanıma sunulan bir ses efektidir. Bu efekt, ses kanalından dokunma verilerini oluşturabilir ve sesle senkronize dokunma olarak gerçek zamanlı olarak oynatabilir.
Efekt, Şekil 9'da açıklandığı gibi AudioTrack
alanına uygulanır.
Şekil 9. Dokunsal Geri Bildirim Oluşturucu mimarisi
Dokunma üreteci algoritmanızın yüksek kaliteli dokunma ürettiğinden emin olmak için ses dalgalarına uyguladığı filtre zincirini yapılandıran parametreleri ayarlayarak üretme algoritmasını cihaz titreşim motoruna göre ayarlayın. Bu bölümde bu parametreler ayrıntılı olarak ve donanım spesifikasyonunuza göre nasıl ayarlanacakları açıklanmaktadır.
Bant geçiren filtre için rezonans frekansı
Titreşimli motorun rezonans frekansı, dokunma motorunun maksimum çıkışa sahip olduğu frekanstır. Bu parametre, daha geniş bir bant genişliği elde etmek için rezonatörü, yanıt aktarım işlevini kısmen düzeltecek şekilde ayarlar. Android çerçevesi bu değeri otomatik olarak Vibrator HAL yönteminin
IVibrator.getResonantFrequency
çıkışına bağlar.Bu parametrenin varsayılan değeri 150 Hz'dir. Bu, buradaki kodda değiştirilebilir.
Yavaş zarf için normalleştirme gücü
Bu parametre, kısmi normalleştirmedeki (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.
Band-stop filtresi için Q faktörü
Titreşim kalitesi faktörü (Q faktörü) iki parametreye göre belirlenir:
Sıfır Q, bant durdurma filtresindeki sıfırların kalite faktörüdür ve rezonansı kısmen iptal eder.
Kutup Q, bant durdurma filtresindeki kutupların kalite faktörüdür.
Bu iki değerin oranı, daha düşük frekansları artırmak ve algoritma yanıtını genişletmek için rezonansın baskılanmasını sınırlar. Örneğin, Sıfır Q için 8 ve Kutup Q için 4 değeri, rezonans azaltmayı 2 kat (6 dB) ile sınırlayarak 2 oranını oluşturur. Android çerçevesi, her iki değeri de Vibratör HAL yönteminin
IVibrator.getQFactor
çıkışına bağlar.Varsayılan değerler, cihazınızdaki motor gücünün azaltılmasını hesaba katmıyorsa her iki değeri de aynı anda değiştirmenizi ve ikisini de artırmanızı veya azaltmanızı öneririz. Sıfır Q ile Kutup Q 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 bozulma kullanarak daha yüksek seviyeleri artıran bir düşük geçiren filtre tarafından uygulanır. Varsayılan olarak 300 Hz değerine ayarlanır. Bu, buradaki kodda değiştirilebilir.
Bozulma için kazanç ve küp eşiği girin
Bu parametreler, giriş dalga biçimine uygulanan ve düşük frekanslı sinyallerin genliğini azaltan ve yüksek frekanslı sinyallerin genliğini artıran doğrusal olmayan bir bozulma filtresi tarafından kullanılır.
- Giriş kazanç faktörünün varsayılan değeri 0,3'tür.
- Küp eşiği için varsayılan değer 0,1'dir.
Her iki değeri de birlikte değiştirmenizi öneririz. Bu bilgileri burada bulunan kodda bulabilirsiniz.
Bu filtrenin uyguladığı işlev hakkında daha fazla bilgi için buradaki uygulamaya bakın. Bu iki parametrenin çıkışı nasıl etkilediği hakkında daha fazla bilgi edinmek için filtrelerin frekans yanıtlarını grafikle göstermenizi ve frekans yanıtlarının farklı parametre değerleriyle nasıl değiştiğini gözlemlemenizi öneririz.
Bozukluğun çıkış kazancı
Bu parametre, nihai titreşim genliğini kontrol eder. Titreşim genliklerini 1'den az olacak şekilde sınırlayan yumuşak bir sınırlayıcıdan sonra uygulanan nihai kazançtır. Varsayılan değeri 1,5 olan bu parametre, 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ı duyuyorsanız değeri düşürün.