Dokunsal çerçeve için kullanıcı deneyimi temeli

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.

Kullanıcı Deneyimi İlkeleri

Ş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
  • CONTEXT_CLICK
  • SAAT_KARTI
  • SANAL_ANAHTAR
  • KEYBOARD_TAP
  • LONG_PRESS
2016'dan önce
  • KEYBOARD_PRESS
  • KEYBOARD_RELEASE
  • TEXT_HANDLE_MOVE
  • VIRTUAL_KEY_RELEASE
2017 (Android 8)
  • ONAYLA
  • REDDET
  • GESTURE_START
  • GESTURE_END
2020 (Android 11)
android.View
  • performHapticFeedback()
2016'dan önce
android.os.Vibrator
  • vibrate()
  • hasVibrator()
2016'dan önce
  • hasAmplitudeControl()
2017 (Android 8)
  • areAllEffectsSupported()
  • areAllPrimitivesSupported()
  • areEffectsSupported()
  • arePrimitivesSupported()
2020 (Android 11)
android.os.TitreşimEfekti
  • createOneShot()
  • createWaveform()
2017 (Android 8)
  • EFEKT_KARTI
  • EFFECT_CLICK
  • EFFECT_HEAVY_CLICK
  • EFEKT_ÇİFT_TIKLAMA
  • createÖnceden Tanımlanmış()
2019 (Android 10)
android.os.VibrationEffect.Composition
  • PRIMITIVE_ONAY
  • PRIMITIVE_CLICK
  • addPrimitive()
  • besteleme()
2020 (Android 11)
android.media.AudioAttributes.Builder
  • setHapticChannelsMuted()
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.

Bas ve bırak

Ş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.

Zengin Dokunma Teknolojisi

Şekil 4. Kayan doku ile zengin dokunma teknolojisi

Sürükleme ve Kaydırma

Ş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

  1. 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.
  2. VibrationEffect simgesini kullanın.createWaveform(timings[], amplitudes[], int repeat).

  3. Şekil 6'da gösterildiği gibi, timings[] ve amplitudes[] serisini ayarlayarak yumuşak başlangıç eğrisi oluşturun.

Uzun Titreşim

Ş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.

Ses çifti

Ş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 veya SoundPool 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 ve SoundPool ile dokunma teknolojisi verilerinin ve oynatmanın varlığını gösterir.
  • audio_policy_configuration.xml'te dokunma ve ses oynatma desteğini belirtin.

    • Dokunma teknolojisi kanalıyla çıkış profili kullanınAUDIO_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 kanalını oynatmak için AudioAttributes.Builder( ).setHapticChannelsMuted(boolean muted) değerini false 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.
  • Titreşim HAL'i harici kontrol desteğini uygulamalıdır.

Sesle Eşleştirilmiş Dokunma

Ş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.

Dokunsal Oluşturucu mimarisi

Ş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.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.