Dokunsal çerçeve için UX temeli

Haptikler etrafında oluşturulan tüm Android çerçeve geliştirmeleri, eşit oranda gelişen bir dizi UX ilkesi tarafından yönlendirilir. Mevcut ilkeler, vızıldayan titreşimi net haptiklerle değiştirmeyi ve zengin haptikleri keşfetmeyi içerir.

UX İlkeleri

Şekil 1. Mevcut ilkeler

Aşağıdaki tablo, kullanılabilir tüm haptik API'lerini listeler.

API yöntemler Yıl eklendi
android.view.HapticFeedbackSabitler
  • CONTEXT_CLICK
  • CLOCK_TICK
  • VIRTUAL_KEY
  • KEYBOARD_TAP
  • UZUN BASMA
2016'dan önce
  • KEYBOARD_PRESS
  • KEYBOARD_RELEASE
  • TEXT_HANDLE_MOVE
  • VIRTUAL_KEY_RELEASE
2017 (Android 8)
  • ONAYLAMAK
  • REDDETMEK
  • GESTURE_START
  • GESTURE_END
2020 (Android 11)
android.Görünüm
  • performHapticFeedback()
2016'dan önce
android.os.Vibratör
  • titret()
  • hasVibrator()
2016'dan önce
  • varGenlikKontrol()
2017 (Android 8)
  • areAllEffectsSupported()
  • areAllPrimitivesSupported()
  • areEffectsSupported()
  • arePrimitivesSupported()
2020 (Android 11)
android.os.Titreşim Etkisi
  • oluşturOneShot()
  • dalga formu oluştur()
2017 (Android 8)
  • EFFECT_TICK
  • EFFECT_CLICK
  • EFFECT_HEAVY_CLICK
  • EFFECT_DOUBLE_CLICK
  • oluşturÖnceden tanımlanmış()
2019 (Android 10)
android.os.VibrationEffect.Composition
  • PRIMITIVE_TICK
  • İLKEL_CLICK
  • addPrimitive()
  • oluştur()
2020 (Android 11)
android.media.AudioAttributes.Builder
  • setHapticChannelsMuted()
2019 (Android 10)

Buzzy titreşim

Ç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 rahatsız edici duyulabilir sesler üreten eski donanım bileşenleri, düşük kaliteli izlenimler (örneğin, ucuz, bozuk bir telefon) sunarak dokunsal UX'e zarar verebilir.

Haptikleri temizle

Net haptikler , ayrı durum değişikliklerinin algılanmasını destekler (örneğin, güç açma/kapama işlemi sırasında ikili değişiklikler). Ayrık uygunluğun doğası gereği, net haptikler tek bir varlık olarak üretilir (örneğin, bir girdi olayı başına bir haptik etki).

Android, vızıltılı veya duygusal duyumlar yerine güçlü ancak keskin duyumlar içeren net haptikler sunmayı amaçlar.

Net haptikleri desteklemek için oluşturulan önceden tanımlanmış dokunsal sabitler aşağıdakileri içerir.

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

VibrationEffect :

  • EFFECT_CLICK
  • EFFECT_DOUBLE_CLICK
  • EFFECT_HEAVY_CLICK
  • EFFECT_TICK

Cihaz üreticileri ve geliştiriciler arasında ortak bilgi birikimi oluşturmak, Android ekosistemindeki genel haptik kalitesini 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.

Basın ve Yayın

Şekil 3. Basma ve bırakma.

Zengin haptikler

Zengin haptikler , tek bir dürtüye dayalı etkilerin ötesine geçen büyüyen bir haptik kategorisidir. Android, yüksek düzeyde birleştirilebilirlik ve ince bir ayrıntı düzeyi ile ayarlanabilirlik ile zengin haptikleri desteklemeyi amaçlar. Aşağıdaki kullanım durumları Android 11 veya önceki sürümlerde desteklenir.

Zengin Haptikler

Şekil 4. Kayan dokulu zengin haptikler

Sürükleme ve Kaydırma

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

Kullanım durumu 1: Kayan doku

Parmak bir dokunmatik yüzey üzerinde kayarken (örneğin, sürükleme, kaydırma, hayali dokunsal doku ile yüzeyi keşfetme) bir haptik etki tekrarlanırsa, yinelenen haptik etkiler tercihen keskin ve incedir.

Bireysel efekt net değil de buz gibiyse, tekrarlar arasındaki aralıklar muhtemelen silinecektir. Sonuç, çoklu ayrık sinyaller yerine tek bir uzun vızıltıdır.

Genlik yeterince süptil değilse, algılanan haptik enerji tekrarlama yoluyla birikir ve tekrarın sonunda ezici bir şekilde güçlü haptiklerle sonuçlanır.

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

HapticFeedbackConstants içinde CLOCK_TICK ve TEXT_HANDLE_MOVE HapticFeedbackConstants . Bu sabitler, tekrar ve genliğin özelliklerini önceden tanımlar.

Kendi efektinizi yaratmak

Kendi efektinizi yaratmak için, VibrationEffect.Composition içinde PRIMITIVE_CLICK ve PRIMITIVE_TICK dizilerini bir araya getirerek bir tasarım oluşturun. addPrimitive(int primitiveID, float scale, int delay) kullanarak tekrar ve genlik ölçeğinin özelliklerini ayarlayabilirsiniz. Destek, Vibratör HAL Arabiriminin CAP_COMPOSE_EFFECTS yeteneğine dayanır.

Kullanım durumu 2: Kolaylaştırma etkisi ile uzun titreşim

Uzun titreşim, 0'dan hedef genliğe geçiş yapan düzgün genlikli bir titreşimdir. Uzun titreşim, kolayca algılanabilen dikkat haptikleri üretebilir. Ancak, sessiz bir ortamda ani ve uzun süreli bir titreşim kullanıcıları ürkütebilir ve genellikle duyulabilir uğultu sesleri üretir. Daha hoş bir uzun titreşim oluşturmak için, uzun titreşimin başlangıcında kolaylık efektini uygulayın. Bu, hedef genliğe doğru oluşan yumuşak bir genlik geçişi üretir.

Kolaylaştırma efektini uygulama

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

    • Değişken genlik ile kolaylık etkisi üretmek için sonucun true olması gerekir.
  2. VibrationEffect kullanın. createWaveform(timings[], amplitudes[], int repeat) .

  3. Şekil 6'da gösterildiği gibi, kolaylık eğrisini oluşturmak için timings[] ve amplitudes[] serilerini ayarlayın.

Uzun Titreşim

Şekil 6. Uzun titreşim kolaylığı eğrisi

Kullanım durumu 3: Sesle birleştirilmiş haptikler

Sesle birleştirilmiş haptikler , kullanıcının dikkatini çekmek için sesin ritmiyle birleştirilmiş dokunsal kalıplardır.

Ses bağlantılı haptikler: Avantajlar

Ses bağlantılı haptikleri uygulamak için net haptikleri uzun titreşimlerle birleştirin. Net haptiklerden gelen güçlü ama kısa dokunsal duyumlar, ayrı ritmik modeller sunar. Uzun titreşimin sağladığı yüksek düzeyde uyaranlarla birleştirildiğinde, bu, kullanıcının dikkatini çekmek için harika bir iş çıkarır.

Duyum ​​ritmik kalıplarını dikkate almak önemlidir. Ritim duygusu yoksa, kullanıcı dokunsal duyuları rastgele vızıltılar olarak algılar ve onları görmezden gelme eğilimindedir.

ses çifti

Şekil 7. Ses çifti haptik örneği

Ses bağlantılı haptikler: Uygulamaya yönelik ipuçları

Sesle eşleştirilmiş haptiklerin 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 veya SoundPool sınıflarını kullanın.

    • Özel bir meta veri anahtarına sahip OGG biçimindeki varlıklar ( ANDROID_HAPTIC ardından bir dizi dokunsal kanal), dokunsal verilerin varlığını ve MediaPlayer ve SoundPool ile oynatmayı gösterir.
  • audio_policy_configuration.xml içinde dokunma ve ses çalma desteğini belirtin.

    • AUDIO_CHANNEL_OUT_HAPTIC_A|B haptik kanalıyla bir çıktı profili kullanın.
    • Haptik kanalları olan bir çıktı akışı için, haptik kanalların verilerde ekstra kanallar olarak sunulduğunu unutmayın.

    Örnek

    Çıkış akışı için 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) değiştirin

    dokunsal kanalı oynatmak için false yapın.

    • Varsayılan olarak, dokunsal kanalların sesi kapatılır ( true ).
    • Kullanım durumları, senkronize dokunma ve geri bildirim ile zil sesleri ve kullanıcı arayüzü seslerini içerir.
  • Vibratör HAL, harici kontrol desteği uygulamalıdır.

Ses Bağlantılı Haptikler

Şekil 8. Sesle birleştirilmiş haptiklerin uygulanması

Ses bağlantılı haptikler: Haptic Generator

HapticGenerator , bir ses kanalından dokunsal veri oluşturabilen ve bunu gerçek zamanlı olarak ses bağlantılı haptikler olarak çalabilen, Android 12'de tanıtılan bir Ses Efektidir. Efekt, AudioTrack Şekil 9'da açıklandığı gibi uygulanır.

Haptic Generator architecture

Şekil 9. Haptic Generator mimarisi

Haptik üreteci algoritmanızın yüksek kaliteli haptikler ürettiğinden emin olmak için, ses dalga formlarına uyguladığı filtre zincirini yapılandıran parametreleri ayarlayarak oluşturma algoritmasını cihaz vibratör motoruna ayarlayın. Bu bölüm, bu parametreleri ayrıntılı olarak açıklar ve bunları donanım özelliklerine göre nasıl ayarlayacağınızı açıklar.

  1. Bant geçiren filtre için rezonans frekansı

    Vibratör rezonans frekansı, bir haptik aktüatörün maksimum çıktıya 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 için bir anti-rezonatörü ayarlar. Android çerçevesi bu değeri otomatik olarak Vibrator HAL yöntemi IVibrator.getResonantFrequency .

    Bu parametre için varsayılan değer 150Hz'dir . Bu, buradaki kodda değiştirilebilir.

  2. Yavaş zarf için normalleştirme gücü

    Bu parametre, kısmi normalizasyonda (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. Bant durdurma filtresi için Q faktörü

    Vibratör kalite faktörü (Q faktörü) iki parametre ile belirlenir:

    • Sıfır Q, rezonansı kısmen iptal eden bant durdurma filtresindeki sıfırların kalite faktörü.

    • 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 bastırılmasını sınırlar. Örneğin, Sıfır Q için varsayılan 8 ve Kutup Q için 4 olan varsayılan değerler, 2'lik bir oran üretir ve rezonans bastırmayı 2 (6 dB) faktörle sınırlar. Android çerçevesi, her iki değeri de Vibrator HAL yönteminin IVibrator.getQFactor .

    Varsayılan değerler, cihazınızdaki motor gücünün sönümlenmesini hesaba katmıyorsa, her iki değeri aynı anda değiştirmenizi ve her ikisini de artırmanızı veya 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.

  4. Bozulma 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çiren filtre tarafından uygulanır. Varsayılan olarak 300Hz'dir . Bu, buradaki kodda değiştirilebilir.

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

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

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

    Her iki değeri birlikte değiştirmenizi öneririz. Buradaki kodda bulunabilirler.

    Bu filtre tarafından uygulanan 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 yanıtlarını çizmenizi ve farklı parametre değerleriyle frekans yanıtlarının nasıl değiştiğini gözlemlemenizi öneririz.

  6. Bozulma için çıkış kazancı

    Bu parametre, son titreşim genliğini kontrol eder. Titreşim genliklerini 1'in altına sınırlayan bir yumuşak 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 tıkırtısını duyabiliyorsanız, değeri azaltın.