Dokunsal bilgiler etrafında oluşturulan tüm Android çerçeve iyileştirmeleri, eşit oranda gelişen bir dizi UX ilkesi tarafından yönlendirilir. Mevcut prensipler vızıltılı titreşimin net dokunsal bilgilerle değiştirilmesini ve zengin dokunsal özelliklerin keşfedilmesini içermektedir.
Şekil 1. Mevcut ilkeler
Aşağıdaki tabloda mevcut tüm dokunsal API'ler listelenmektedir.
API'si | Yöntemler | Yıl eklendi |
---|---|---|
android.view.HapticFeedbackConstants |
| 2016'dan önce |
| 2017 (Android8) | |
| 2020 (Android11) | |
android.Görünüm |
| 2016'dan önce |
android.os.Vibratör |
| 2016'dan önce |
| 2017 (Android8) | |
| 2020 (Android11) | |
android.os.VibrationEffect |
| 2017 (Android8) |
| 2019 (Android10) | |
android.os.VibrationEffect.Composition |
| 2020 (Android11) |
android.media.AudioAttributes.Builder |
| 2019 (Android10) |
Vızıltı titreşimi
Ç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 hoş olmayan duyulabilir sesler üreten eski donanım bileşenleri, düşük kaliteli izlenimler (örneğin, ucuz, bozuk bir telefon) sunarak dokunsal kullanıcı deneyimine zarar verebilir.
Net dokunuşlar
Net dokunsal özellikler, ayrı durum değişikliklerinin (örneğin, açma/kapama işlemi sırasındaki ikili değişiklikler) hissini destekler. Ayrık sağlamanın doğası gereği, net dokunsal efektler tek bir varlık olarak üretilir (örneğin, bir giriş olayı başına bir dokunsal etki).
Android, vızıltılı veya yumuşak hisler yerine güçlü ancak keskin hislerle net dokunsal bilgiler sunmayı amaçlıyor.
Net dokunsal özellikleri 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
VibrationEffect
Etkisinde:
-
EFFECT_CLICK
-
EFFECT_DOUBLE_CLICK
-
EFFECT_HEAVY_CLICK
-
EFFECT_TICK
Cihaz üreticileri ve geliştiriciler arasında ortak bilgi oluşturmak, Android ekosistemindeki genel dokunsal kaliteyi 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 dokunsallık
Zengin dokunsal, tek dürtüye dayalı etkilerin ötesine geçen, büyüyen bir dokunsal kategoridir. Android, yüksek düzeyde şekillendirilebilirlik ve ayarlanabilirlik ile iyi düzeyde ayrıntı düzeyine sahip zengin dokunsal özellikleri desteklemeyi amaçlamaktadır. Aşağıdaki kullanım örnekleri Android 11 veya daha düşük sürümlerde desteklenir.
Şekil 4. Kayan dokuya sahip zengin dokunsal özellikler
Şekil 5. Sürükleme ve kaydırma
Kullanım örneği 1: Kayan doku
Parmak bir dokunmatik yüzey üzerinde kayarken dokunsal bir etki tekrarlanıyorsa (örneğin, sürükleme, kaydırma, hayalet dokunsal dokuyla yüzeyi keşfetme), tekrarlanan dokunsal etkiler tercihen net ve incelikli olur.
Eğer bireysel etki keskin değil de vızıltılı ise, o zaman tekrarlar arasındaki aralıkların silinmesi muhtemeldir. Sonuç, birden fazla ayrık sinyal yerine uzun bir vızıltıdır.
Genlik yeterince ince değilse, o zaman algılanan dokunsal enerji tekrar yoluyla birikir ve tekrarın sonunda çok güçlü bir dokunsal enerji ortaya çıkar.
Kaydırma ve sürükleme hareketleri için basit bir yüzey dokunsal dokusu uygulama
HapticFeedbackConstants
CLOCK_TICK
ve TEXT_HANDLE_MOVE
kullanın. Bu sabitler tekrarlama ve genlik özelliklerini önceden tanımlar.
Kendi efektinizi yaratmak
Kendi efektinizi oluşturmak için, VibrationEffect.Composition
içindeki PRIMITIVE_CLICK
ve PRIMITIVE_TICK
dizilerini bir araya getirerek bir tasarım oluşturun. addPrimitive(int primitiveID, float scale, int delay)
kullanarak tekrarlama ve genlik ölçeğinin özelliklerini ayarlayabilirsiniz. Destek , Vibratör HAL Arayüzü'nün CAP_COMPOSE_EFFECTS
özelliğine dayanır.
Kullanım senaryosu 2: Kolay kullanım efektli uzun titreşim
Uzun titreşim, 0'dan hedef genliğe geçiş yapan yumuşak genlikli bir titreşimdir. Uzun titreşim, kolayca algılanabilen dikkatsel dokunsal hisler üretebilir. Ancak sessiz bir ortamda ani ve uzun bir titreşim, kullanıcıları ürkütebilir ve sıklıkla duyulabilir uğultu sesleri üretir. Daha hoş bir uzun titreşim oluşturmak için, uzun titreşimin başlangıcında rahatlama efektini uygulayın. Bu, hedef genliğe doğru gelişen yumuşak bir genlik geçişi üretir.
Kolaylık efektini uygulama
android.os.Vibrator.hasAmplitudeControl()
ile genlik kontrolünün donanım özelliklerini kontrol edin.- Değişken genlikte kolaylık etkisi yaratmak için sonucun
true
olması gerekir.
- Değişken genlikte kolaylık etkisi yaratmak için sonucun
VibrationEffect
kullanın.createWaveform(timings[], amplitudes[], int repeat)
.Şekil 6'da gösterildiği gibi, hareket kolaylığı eğrisini oluşturmak için
timings[]
veamplitudes[]
serilerini ayarlayın.
Şekil 6. Uzun titreşim kolaylaştırma eğrisi
Kullanım örneği 3: Ses bağlantılı dokunsal özellikler
Sesle birleştirilmiş dokunsallar, kullanıcının dikkatini çekmek için sesin ritmiyle birleştirilmiş dokunsal desenlerdir.
Ses bağlantılı dokunsal özellikler: Faydaları
Ses bağlantılı dokunsal etkiyi uygulamak için net dokunsal özellikleri uzun titreşimlerle birleştirin. Net dokunsal duyulardan gelen güçlü ama kısa dokunsal duyumlar, ayrı ritmik kalıplar sunar. Uzun titreşimin sağladığı yüksek seviyedeki uyarılarla birleştiğinde bu, kullanıcının dikkatini çekme konusunda harika bir iş çıkarır.
Duygu ritmik kalıplarını dikkate almak önemlidir. Ritim duygusu yoksa kullanıcı dokunsal duyuları rastgele vızıltılar olarak algılar ve bunları görmezden gelme eğilimindedir.
Şekil 7. Ses çifti dokunsal örneği
Ses bağlantılı dokunsal özellikler: Uygulamaya yönelik ipuçları
Sesle eşleştirilmiş dokunsal özelliklerin 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 formatındaki varlıklar (
ANDROID_HAPTIC
ve ardından bir dizi dokunsal kanal), dokunsal verilerin varlığını veMediaPlayer
veSoundPool
ile oynatıldığını gösterir.
- Özel bir meta veri anahtarına sahip OGG formatındaki varlıklar (
audio_policy_configuration.xml
dosyasında dokunma ve ses oynatma desteğini belirtin.-
AUDIO_CHANNEL_OUT_HAPTIC_A|B
dokunsal kanalı olan bir çıkış profili kullanın. - Dokunsal kanallara sahip bir çıktı akışı için dokunsal kanalların verilerde ekstra kanallar olarak sunulduğunu unutmayın.
Örnek
Çıkış akışının 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)
Dokunsal kanalı oynatmak için
false
kullanın.- Varsayılan olarak dokunsal kanalların sesi kapatılmıştır (
true
). - Kullanım örnekleri arasında eşzamanlı dokunma ve geri bildirim içeren zil sesleri ve kullanıcı arayüzü sesleri yer alır.
- Varsayılan olarak dokunsal kanalların sesi kapatılmıştır (
Vibratör HAL 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)
kullanın.
- HIDL uygulamaları için
Şekil 8. Ses bağlantılı dokunsal uygulama
Ses bağlantılı dokunsal: Dokunsal Jeneratör
HapticGenerator
, Android 12'de tanıtılan ve bir ses kanalından dokunsal veriler oluşturabilen ve bunları ses bağlantılı dokunsal olarak gerçek zamanlı olarak oynatabilen bir Ses Efektidir . Efekt, Şekil 9'da açıklandığı gibi AudioTrack
uygulanır.
Şekil 9. Haptic Generator mimarisi
Dokunsal üreteç algoritmanızın yüksek kaliteli dokunsal ürettiğinden emin olmak için, ses dalga biçimlerine uyguladığı filtre zincirini yapılandıran parametreleri ayarlayarak oluşturma algoritmasını cihazın titreşim motoruna göre ayarlayın. Bu bölümde bu parametreler ayrıntılı olarak açıklanmakta ve bunları donanım özelliklerine göre nasıl ayarlayacağınız açıklanmaktadır.
Bant geçiren filtre için rezonans frekansı
Titreşim rezonans frekansı, dokunsal bir aktüatörün maksimum çıkışa sahip olduğu frekanstır. Bu parametre, daha geniş bir bant genişliği elde etmek amacıyla, bir anti-rezonatörü, yanıt aktarım fonksiyonunu kısmen düzleştirecek şekilde ayarlar. Android çerçevesi bu değeri otomatik olarak Vibratör HAL yöntemi
IVibrator.getResonantFrequency
çıkışına bağlar.Bu parametrenin varsayılan değeri 150Hz'dir . Bu, buradaki kodda değiştirilebilir.
Yavaş zarf için normalleştirme gücü
Bu parametre kısmi normalizasyondaki (otomatik kazanç kontrolü) üssü belirler. Varsayılan değeri -0,8'dir ; bu, dinamik aralık değişiminin %80'inin bu kazanç kontrol adımıyla ortadan 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 parametreyle belirlenir:
Sıfır Q, bant durdurma filtresindeki rezonansı kısmen iptal eden sıfırların kalite faktörü.
Kutup Q, bant durdurma filtresindeki kutupların kalite faktörü.
Bu iki değerin oranı, düşük frekansları artırmak ve algoritma yanıtını genişletmek amacıyla rezonansın bastırılmasını sınırlar. Örneğin, Sıfır Q için 8 ve Kutup Q için 4 varsayılan değerleri, rezonans bastırmayı 2 (6 dB) faktörüyle sınırlayarak 2'lik bir oran üretir. Android çerçevesi her iki değeri de Vibratör HAL yöntemi
IVibrator.getQFactor
çıktısı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ı veya her ikisini de 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.
Distorsiyon 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çiş filtresi 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, giriş dalga biçimine uygulanan, düşük frekanslı sinyallerin genliğini azaltan ve yüksek frekanslı olanları 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ğinin varsayılan değeri 0,1'dir .
Her iki değeri birlikte değiştirmenizi öneririz. Buradaki kodda bulunabilirler.
Bu filtrenin uyguladığı 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 tepkilerini çizmenizi ve frekans tepkilerinin farklı parametre değerleriyle nasıl değiştiğini gözlemlemenizi öneririz.
Distorsiyon için çıkış kazancı
Bu parametre son titreşim genliğini kontrol eder. Bu, titreşim genliklerini 1'den daha düşük bir değerle sınırlayan yumuşak bir 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 takırdadığını duyabiliyorsanız değeri azaltın.