Dokunma çerçevesi için kullanıcı deneyimi temeli

Dokunsal geri bildirimler etrafında oluşturulan tüm Android çerçeve iyileştirmeleri, eşit oranda gelişen bir dizi kullanıcı deneyimi ilkesine dayanır. Mevcut ilkeler, titreşimli dokunma yerine net dokunma özelliğini kullanmayı ve zengin dokunma özelliğini keşfetmeyi içerir.

Kullanıcı deneyimi ilkeleri

1. şekil. Mevcut ilkeler.

Aşağıdaki tabloda, kullanılabilen tüm dokunsal API'ler 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)

Buzzy titreşimi

Çağrı cihazları ve özellikli telefonlardan beri, düşük kaliteli ancak enerji açısından verimli olan eksantrik dönen kütle (ERM) buzzer tabanlı titreşimler, sessiz modda işitsel zil sesinin yerine kullanılmıştır. Yüksek ve rahatsız edici sesler üreten eski donanım bileşenleri, düşük kaliteli izlenimler sunarak (ör. ucuz ve bozuk bir telefon) dokunsal kullanıcı deneyimine zarar verebilir.

Dokunma teknolojisini temizleme

Net dokunsal geri bildirimler, ayrı durum değişiklikleri (ör. açma ve kapatma işlemi sırasında ikili değişiklikler) hissini destekler. Ayrı etkileşim fırsatının doğası gereği, net dokunsal geri bildirimler tek bir öğe olarak oluşturulur (ör. giriş etkinliği başına bir dokunsal efekt).

Android, titreşimli veya yumuşak hisler yerine güçlü ancak keskin hisler veren net dokunsal geri bildirimler sunmayı amaçlar.

Net dokunsal geri bildirimi desteklemek için oluşturulan önceden tanımlanmış dokunsal sabitler aşağıdaki öğeleri içerir.

İçinde HapticFeedbackConstants:

  • 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

İçinde VibrationEffect:

  • EFFECT_CLICK
  • EFFECT_DOUBLE_CLICK
  • EFFECT_HEAVY_CLICK
  • EFFECT_TICK

Cihaz üreticileri ve geliştiriciler arasında ortak bilgi oluşturmak, Android ekosistemindeki dokunsal geri bildirimin genel kalitesini artırmak için çok önemlidir. Dokunsal uygulama hakkında daha fazla bilgi edinmek için temel kontrol listesini, donanım değerlendirmesini ve CDD'yi kullanın.

Bas ve Bırak

Şekil 2. Basma ve bırakma

Zengin dokunma teknolojisi

Zengin dokunsal geri bildirim, tek bir darbeye dayalı efektlerin ötesine geçen ve büyüyen bir dokunsal geri bildirim kategorisidir. Android, yüksek birleştirilebilirlik ve ince ayrıntı düzeyinde ayarlanabilirlik ile zengin dokunsal geri bildirimleri desteklemeyi amaçlar. Aşağıdaki kullanım alanları Android 11 veya önceki sürümlerde desteklenir.

Zengin dokunma teknolojisi

3.Şekil Kayar dokulu zengin dokunma teknolojisi.

Sürükleme ve Kaydırma

Şekil 4. Sürükleme ve kaydırma

1. kullanım alanı: Kaydırma dokusu

Parmak dokunmatik yüzeyde kaydırılırken (ör. sürükleme, kaydırma, yüzeyi hayali dokunsal dokuyla keşfetme) dokunsal efekt tekrarlanırsa tekrarlanan dokunsal efektler tercihen net ve ince olmalıdır.

Bireysel efekt net değil de cızırtılıysa tekrarlar arasındaki aralıklar silinir. Sonuç, birden fazla ayrı sinyal yerine tek bir uzun vızıltıdır.

Titreşim yeterince hafif değilse algılanan dokunsal enerji, tekrarlama yoluyla artar ve tekrarlama sonunda aşırı derecede güçlü dokunsal geri bildirimler ortaya çıkar.

Kaydırma ve sürükleme hareketleri için yüzey dokunsal dokusu uygulama

HapticFeedbackConstants uygulamasında CLOCK_TICK ve TEXT_HANDLE_MOVE özelliğini kullanın. Bu sabitler, tekrar ve genlik özelliklerini önceden tanımlar.

Kendi efektinizi oluşturma

Kendi efektinizi oluşturmak için VibrationEffect.Composition'de PRIMITIVE_CLICK ve PRIMITIVE_TICK dizilerini bir araya getirerek bir tasarım oluşturun. Tekrar ve genlik ölçeğinin özelliklerini addPrimitive(int primitiveID, float scale, int delay) kullanarak ayarlayabilirsiniz. Destek, Vibrator HAL Arayüzü'nün CAP_COMPOSE_EFFECTS özelliğine bağlıdır.

2. kullanım alanı: Kolay giriş efektli uzun titreşim

Uzun titreşim, 0'dan hedef genliğe geçiş yapan düzgün bir genlik titreşimidir. Uzun titreşim, algılanabilir dikkat çekici dokunsal uyarılar oluşturabilir. Ancak, sessiz bir ortamda uzun süren titreşimler kullanıcıları korkutabilir ve genellikle duyulabilir vızıltı sesleri çıkarır. Daha hoş bir uzun titreşim oluşturmak için uzun titreşimin başında kolaylaştırma efektini uygulayın. Bu, hedef genliğe doğru ilerleyen düzgün bir genlik geçişi üretir.

Yavaş başlama efektini uygulama

  1. android.os.Vibrator.hasAmplitudeControl() ile genlik kontrolünün donanım özelliklerini kontrol edin.

    • Sonuç, değişen genlikte kolay giriş efekti oluşturmak için true olmalıdır.
  2. VibrationEffect kullanın.createWaveform(timings[], amplitudes[], int repeat).

  3. Şekil 5'te gösterildiği gibi, timings[] ve amplitudes[] serisini ayarlayarak kolay giriş eğrisini oluşturun.

Uzun titreşim

5.şekil Uzun titreşimli kolay giriş eğrisi.

3. kullanım alanı: Sesle bağlantılı dokunma teknolojisi

Sesle bağlantılı dokunsal geri bildirimler, kullanıcının dikkatini çekmek için sesin ritmiyle bağlantılı dokunsal desenlerdir.

Sesle bağlantılı dokunma teknolojisi: Avantajları

Sesle bağlantılı dokunsal geri bildirimi uygulamak için net dokunsal geri bildirimi uzun titreşimlerle birleştirin. Net dokunsal geri bildirimlerin güçlü ancak kısa dokunsal hisleri, ayrı ritmik desenler sunar. Uzun titreşimin sağladığı yüksek uyarı seviyeleriyle birleştiğinde bu özellik, kullanıcının dikkatini çekmek için harika bir yöntemdir.

Ritmik duygu kalıplarını göz önünde bulundurmak önemlidir. Ritim duygusu yoksa kullanıcı, dokunsal hisleri rastgele titreşimler olarak algılar ve bunları göz ardı etme eğiliminde olur.

Ses Çifti

6.şekil Sesli çift dokunsal örnek.

Sesle bağlantılı dokunma teknolojisi: Uygulama ipuçları

Sesle bağlantılı dokunsal geri bildirimi uygulamak için hem ses hem de dokunsal kanalların içerik oynatımıyla ilgili temel düzeyde bilgi sahibi olmanız gerekir. Aşağıdaki noktaları göz önünde bulundurun:

  • MediaPlayer veya SoundPool sınıflarını kullanın.

    • Özel bir meta veri anahtarı (ANDROID_HAPTIC ve ardından bir dizi dokunsal kanal) içeren OGG biçimindeki öğeler, dokunsal verilerin varlığını ve MediaPlayer ile SoundPool kullanılarak oynatıldığını gösterir.
  • audio_policy_configuration.xml içinde dokunma teknolojisi ve ses oynatma desteğini belirtin.

    • Dokunma teknolojisi kanalı içeren bir çıkış profili kullanın AUDIO_CHANNEL_OUT_HAPTIC_A|B.
    • Dokunsal kanalları olan bir çıkış akışında, dokunsal kanalların verilerde ek kanal olarak sunulduğunu unutmayın.

    Örnek

    Çıkış akışının kanal maskesi şu şekildeyse:

    AUDIO_CHANNEL_OUT_STEREO_HAPTIC_A

    Ardından her örnek aşağıdaki gibi görünmelidir:

    AUDIO_LEFT_CHANNEL,AUDIO_RIGHT_CHANNEL,HAPTIC_CHANNEL_A

  • Dokunsal kanalı oynatmak için AudioAttributes.Builder( ).setHapticChannelsMuted(boolean muted) değerini false olarak değiştirin.

    • Dokunsal kanallar varsayılan olarak sessize alınır (true).
    • Kullanım alanları arasında, senkronize dokunsal geri bildirim ve geri bildirim içeren zil sesleri ve kullanıcı arayüzü sesleri yer alır.
  • Vibrator HAL, harici kontrol desteği uygulamalıdır.

Sesle Bağlantılı Dokunma Teknolojisi

Şekil 7. Sesle bağlantılı dokunsal geri bildirimi uygulama

Sesle bağlantılı dokunma teknolojisi: HapticGenerator

HapticGenerator, Android 12'de kullanıma sunulan bir ses efektidir. Bu efekt, bir ses kanalından dokunsal veriler oluşturabilir ve bunları sesle bağlantılı dokunsal geri bildirim olarak gerçek zamanlı oynatabilir. Efekt, Şekil 8'de gösterildiği gibi AudioTrack öğesine uygulanır:

Dokunsal geri bildirim oluşturucu mimarisi

Şekil 8. Dokunsal geri bildirim oluşturucu mimarisi.

Bu mimari görselleştirme, Haptic Generator'ın gelen kullanıcı ses akışına nerede uygulandığını gösterir. Bu işlem, ses akışı Audio HAL'ye gönderilmeden önce gerçekleşir. Jeneratör, AudioMixer ses ve dokunsal verileri böldükten sonra ve diğer ses efektlerinden önce uygulanır. Jeneratörün çıkışı, akıştaki önceki dokunsal verilerin yerini alır.

Dokunsal geri bildirim üretme algoritmanızın yüksek kaliteli dokunsal geri bildirimler ürettiğinden emin olmak için, ses dalga biçimlerine uyguladığı filtre zincirini yapılandıran parametreleri ayarlayarak üretim algoritmasını cihaz titreşim motoruna göre düzenleyin. Bu bölümde, söz konusu parametreler ayrıntılı olarak açıklanmakta ve donanım spesifikasyonunuza göre nasıl ayarlanacağı anlatılmaktadır.

  • Bant geçiren filtre için rezonans frekansı

    Titreşim motorunun rezonans frekansı, dokunsal aktüatörün maksimum çıkışa sahip olduğu frekanstır. Bu parametre, daha geniş bir bant genişliği elde etmek için yanıt aktarım işlevini kısmen düzleştirmek üzere bir anti-rezonatörü ayarlar. Android çerçevesi, bu değeri Vibrator HAL yönteminin IVibrator.getResonantFrequency çıkışıyla 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ştirme (otomatik kazanç kontrolü) işlemindeki üssü belirler. Varsayılan değeri -0,8'dir.Bu, dinamik aralık varyasyonunun% 80'inin bu kazanç kontrolü adımıyla kaldırıldığı anlamına gelir. Bunu kodda değiştirebilirsiniz.

  • Bant durdurma filtresi için Q faktörü

    Titreşim motorunun kalite faktörü (Q faktörü) iki parametreye göre belirlenir:

    • The Zero Q, bant durdurma filtresindeki sıfırların kalite faktörü. Bu faktör, rezonansı kısmen iptal eder.

    • Pole 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 bastırılmasını sınırlar. Örneğin, Zero Q için 8 ve Pole Q için 4 varsayılan değerleri 2 oranını oluşturarak rezonans bastırmayı 2 kat (6 dB) sınırlar. Android çerçevesi, her iki değeri de Vibrator HAL yönteminin IVibrator.getQFactor çıkışı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ı ya da azaltmanızı öneririz. Sıfır Q'nun kutup Q'ya 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 alçak geçiren filtre tarafından uygulanır. Varsayılan olarak 300 Hz'dir. Bunu kodda değiştirebilirsiniz.

  • Bozulma için giriş kazancı ve küp eşiği

    Bu parametreler, giriş dalga biçimine uygulanan doğrusal olmayan bozulma filtresi tarafından kullanılır. Bu filtre, düşük frekanslı sinyallerin genliğini azaltır ve yüksek frekanslı sinyallerin genliğini artırır.

    • Giriş kazancı faktörünün varsayılan değeri 0,3'tür.
    • Küpe eşiği için varsayılan değer 0,1'dir.

    Her iki değeri de birlikte değiştirmenizi öneririz. Bunları kodda bulabilirsiniz.

    Bu filtre tarafından uygulanan işlev hakkında daha fazla bilgi için kod içindeki uygulamaya bakın.

    Bu iki parametrenin çıkışı nasıl etkilediği hakkında daha fazla bilgi edinmek için filtrelerin frekans yanıtlarını çizmenizi 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, son titreşim genliğini kontrol eder. Titreşim genliklerini 1'den daha az olacak şekilde sınırlayan yumuşak sınırlayıcıdan sonra uygulanan son kazançtır. Varsayılan değeri 1, 5'tir ve bunu kodda değiştirebilirsiniz.

    Titreşim çok zayıfsa değeri artırın. Aktüatör donanımının tıkırtı sesini duyuyorsanız değeri düşürün.