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

Kullanıcı Deneyimi İlkeleri

Ş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
  • CONTEXT_CLICK
  • CLOCK_TICK
  • VIRTUAL_KEY
  • 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.VibrationEffect
  • createOneShot()
  • createWaveform()
2017 (Android 8)
  • EFFECT_TICK
  • EFFECT_CLICK
  • EFFECT_HEAVY_CLICK
  • EFFECT_DOUBLE_CLICK
  • createPredefined()
2019 (Android 10)
android.os.VibrationEffect.Composition
  • PRIMITIVE_TICK
  • PRIMITIVE_CLICK
  • addPrimitive()
  • compose()
2020 (Android 11)
android.media.AudioAttributes.Builder
  • setHapticChannelsMuted()
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:

HapticFeedbackConstants'de:

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

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

Zengin Dokunma Teknolojisi

Şekil 4. Kaydırmalı dokuya sahip 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.

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

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

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.

Ses çifti

Ş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 veya SoundPool 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ı ve MediaPlayer ile SoundPool kullanılarak oynatıldığı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ışı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 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 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.

Dokunsal Geri Bildirim 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 açıklanmakta ve donanım özelliklerinize göre nasıl ayarlanacağı 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 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.

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

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

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