Dokunma duyusuna dayalı tüm Android çerçeve iyileştirmeleri, eşit hızda gelişen bir dizi kullanıcı deneyimi ilkesinden güç alır. Mevcut ilkeler arasında vızıltılı titreşimi net dokunma teknolojisiyle değiştirme ve zengin dokunma teknolojisini keşfetme yer alıyor.
Şekil 1. Mevcut ilkeler
Aşağıdaki tabloda mevcut tüm dokunma API'leri listelenmiştir.
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.VibrationEffect |
|
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
Sessiz modda işitsel zil sesinin yerine, düşük kaliteli ancak enerji tasarruflu ERM zil sesine dayalı titreşimler, çağrı cihazları ve özellikli telefonlardan beri kullanılmaktadı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 hissi, ayrı durum değişikliklerinin (ör. açma/kapatma işlemi sırasındaki ikili değişiklikler) hissini destekler. Ayrı olan kolaylaştırıcı özelliğin doğası gereği, 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:
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. Dokunma geri bildirimi 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 ayarlanabilirlik ile ayrıntılı bir ayrıntı düzeyinde zengin dokunma teknolojisini desteklemeyi amaçlar. Aşağıdaki kullanım alanları Android 11 veya önceki sürümlerde desteklenir.
Şekil 4. Kaydırmalı dokuya sahip 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.
Bağımsız efekt net değilse, tekrarlar arasındaki aralıklar muhtemelen silinir. Sonuç olarak, birden fazla ayrı sinyal yerine tek bir uzun uğultu elde edilir.
Genlik yeterince hassas değilse algılanan dokunma enerjisi tekrar yoluyla artar ve tekrarın sonunda son derece güçlü dokunma hissi oluşur.
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şturma
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, titreşim HAL arayüzünün CAP_COMPOSE_EFFECTS
özelliğine bağlıdır.
2. kullanım alanı: Yavaşça başlama etkisiyle 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 ve 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
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.
Sesle senkronize dokunma: Avantajlar
Sesle eşlenen dokunma teknolojisini uygulamak için net dokunma teknolojisini uzun titreşimlerle birleştirin. Net dokunmalardan gelen güçlü ancak kısa dokunma hisleri, ayrı ayrı ritmik kalıplar sunar. Uzun titreşimin sağladığı yüksek düzeyde uyarımla birlikte bu yöntem, kullanıcının dikkatini çekme konusunda mükemmel bir iş çıkarır.
Duyguların ritmik kalıplarını dikkate almak önemlidir. Ritim hissi yoksa kullanıcı, dokunma hislerini rastgele titreşimler olarak algılar ve bunları görmezden gelir.
Şekil 7. Sesli dokunma teknolojisi örneği
Sesle senkronize dokunma teknolojisi: 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.- OGG biçiminde özel bir meta veri anahtarına (
ANDROID_HAPTIC
ve ardından birkaç dokunma kanalı) sahip öğeler, dokunma verilerinin varlığını veMediaPlayer
ileSoundPool
kullanılarak oynatıldığını gösterir.
- OGG biçiminde özel bir 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ışının kanal maskesi aşağıdaki gibi görünüyorsa:
AUDIO_CHANNEL_OUT_STEREO_HAPTIC_A
Ardından her örnek şu şekilde görünecektir:
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 eşleştirilmiş dokunma teknolojisini 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 açıklanmakta ve donanım özelliklerinize göre nasıl ayarlanacağı 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 yanıt aktarma işlevini kısmen düzleştirmek üzere bir anti-rezonatörü ayarlar. Android çerçevesi bu değeri, Vibratör HAL yönteminin
IVibrator.getResonantFrequency
çıktısına otomatik olarak 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 olan varsayılan değerler 2 oranını oluşturur ve rezonans bastırma oranını 2 (6 dB) ile sınırlandırır. 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.
Giriş kazancı ve bozulma için küp eşiği
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.
Bozulma için çı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'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ı duyuyorsanız değeri düşürün.