Dokunma çerçevesi 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 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 ve sabitler 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)
  • CONFIRM
  • REJECT
  • 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 eksantrik dönen kütle (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 ve kapama işlemi sırasındaki ikili değişiklikler) hissini destekler. Ayrı olan kolaylaştırıcı özelliğin 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 veren net bir dokunma deneyimi sunmayı amaçlar.

Net dokunma hissini desteklemek için oluşturulan önceden tanımlanmış dokunma sabitleri aşağıdaki öğeleri içerir.

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 uygulaması hakkında daha fazla bilgi edinmek için temel yapılacaklar listesini, donanım değerlendirmesini ve CDD'yi kullanın.

Basıp bırakma

Şekil 2. 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 birleştirilebilirlik ve hassas ayrıntı düzeyinde ayarlanabilirlik ile zengin dokunma teknolojisini desteklemeyi amaçlar. Aşağıdaki kullanım alanları Android 11 veya önceki sürümlerde desteklenir.

Zengin Dokunma Teknolojisi

Şekil 3. Kaydırmalı dokuya sahip zengin dokunma teknolojisi.

Sürükleme ve Kaydırma

Şekil 4. 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 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, titreşim HAL arayüzünün CAP_COMPOSE_EFFECTS özelliğine dayanı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 dokunsal geri bildirimler 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ş başlangıç 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 5'te gösterildiği gibi yumuşak başlangıç eğrisi oluşturmak için timings[] ve amplitudes[] serisini ayarlayın.

Uzun titreşim

Şekil 5. 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ı yok saymaya eğilimlidir.

Ses çifti

Şekil 6. Sesle birlikte haptik uyarı ö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 oynatmayı gösterir.
  • audio_policy_configuration.xml'te dokunma teknolojisi ve ses oynatma desteğini belirtin.

    • Dokunma kanalı ile çı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 7. Sesle senkronize haptik uygulama.

Sesle eşlenen dokunma teknolojisi: HapticGenerator

HapticGenerator, Android 12'de kullanıma sunulan bir ses efektidir. Bu efekt, bir ses kanalından dokunma verilerini oluşturabilir ve sesle senkronize dokunma olarak gerçek zamanlı olarak oynatabilir. Efekt, Şekil 8'de gösterildiği gibi AudioTrack'a uygulanır:

Dokunsal Geri Bildirim Oluşturucu mimarisi

Şekil 8. Dokunsal Geri Bildirim Oluşturucu mimarisi.

Bu mimari görselleştirmesinde, Haptic Generator'ın ses HAL'ine gönderilmeden önce gelen kullanıcı ses akışına nerede uygulandığı gösterilmektedir. Oluşturucu, AudioMixer ses ve dokunma verilerini böldükten sonra ve diğer ses efektlerinden önce uygulanır. Oluşturucunun çıkışı, akıştaki önceki dokunma verilerini geçersiz kılar.

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 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 değeri kodda değiştirebilirsiniz.

  • 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. Bunu kodda değiştirebilirsiniz.

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

    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 varsayılan değerleri 2 oranını oluşturur ve rezonans bastırma oranını 2 faktörüyle (6 dB) 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. Bunu kodda değiştirebilirsiniz.

  • 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'dir. Bu ayarı kodda değiştirebilirsiniz.

  • 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 bilgilere kodda ulaşabilirsiniz.

    Bu filtrenin uyguladığı işlev hakkında daha fazla bilgi için koddaki 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 bu değeri kodda değiştirebilirsiniz.

    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.