Dokunsal Çerçeve için UX Vakfı

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

UX İlkeleri

Şekil 1. Mevcut ilkeler

Yıllara Göre API'ler

Şekil 2. Yıllara göre Haptics API'leri

Buzzy titreşim

Çağrı cihazlarına ve özellikli telefonlara kadar uzanan, düşük kaliteli ancak gücü verimli kullanan ERM zil tabanlı titreşimler, sessiz modda işitsel zil sesinin yerine kullanılmıştır. Yüksek ve hoş olmayan işitilebilir sesler üreten eski donanım bileşenleri, düşük kaliteli izlenimler (örneğin, ucuz, bozuk bir telefon) sunarak dokunsal UX'e zarar verebilir.

Temiz haptikler

Net haptikler , ayrı durum değişikliklerinin hissini destekler (örneğin, güç açma / kapama işlemi sırasında ikili değişiklikler). Ayrık yeterliliğin doğası gereği, açık haptikler tek bir varlık olarak üretilir (örneğin, her bir giriş olayı için bir dokunsal etki).

Android, vızıltılı veya duygusal hisler yerine güçlü, ancak keskin hislerle net haptikler sunmayı hedefliyor.

Net haptikleri desteklemek için oluşturulmuş önceden tanımlanmış haptik 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 oluşturmak, Android ekosisteminde haptiklerin genel 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 dürtü temelli etkilerin ötesine geçen, büyüyen bir haptik kategorisidir. Android, ince bir ayrıntı düzeyi ile yüksek birleştirme ve ayarlanabilirlik ile zengin haptikleri desteklemeyi amaçlamaktadır. Aşağıdaki kullanım durumları Android 11 veya önceki sürümlerde desteklenir.

Zengin Haptikler

Şekil 4. Kaygan dokuya sahip zengin haptikler

Sürükleme ve Kaydırma

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

Kullanım örneği 1: Kayar doku

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

Bireysel efekt net değil vızıltılıysa, tekrarlar arasındaki aralıklar muhtemelen silinecektir. Sonuç, birden çok ayrık sinyalden ziyade uzun bir vızıltıdır.

Genlik yeterince ince değilse, algılanan haptik enerji tekrarla birikir ve tekrarın sonunda ezici bir çoğunlukla güçlü haptiklerle sonuçlanır.

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

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

Kendi etkinizi yaratmak

Kendi efektinizi yaratmak için, VibrationEffect.Composition 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 Arayüzünün CAP_COMPOSE_EFFECTS özelliğine dayanır.

Kullanım durumu 2: Kolay etkili uzun titreşim

Uzun titreşim, 0'dan hedef genliğe geçiş yapan yumuşak genlikli bir titreşimdir. Uzun titreşim, kolayca algılanabilir dikkat haptikleri oluşturabilir. Bununla birlikte, ani uzun bir titreşim, sessiz bir ortamda kullanıcıları ürkütebilir ve genellikle duyulabilir vızıltı sesleri üretir. Daha hoş bir uzun titreşim oluşturmak için, kolaylık etkisini uzun titreşimin başlangıcında uygulayın. Bu, hedef genliğe doğru gelişen yumuşak bir genlik geçişi üretir.

Kolaylaştırma etkisini uygulama

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

    • Sonuç, değişen genliklerde kolaylık etkisi yaratmak için true olmalıdır.
  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ık eğrisi

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

Sese bağlı haptikler , kullanıcının dikkatini çekmek için sesin ritmi ile birleştirilen haptik kalıplardır.

Sesle birleştirilmiş haptikler: Avantajlar

Sese bağlı haptikleri uygulamak için, net haptikleri uzun titreşimlerle birleştirin. Net haptiklerin güçlü ama kısa haptik hisleri, farklı ritmik kalıplar sunar. Uzun titreşimin sağladığı yüksek seviyeli uyaranlarla birleştirildiğinde, bu, kullanıcının dikkatini çekmek için harika bir iş çıkarır.

Duygu ritmik kalıplarını dikkate almak önemlidir. Herhangi bir ritim duygusu yoksa, kullanıcı dokunsal hisleri rastgele vızıltılar olarak algılar ve onları görmezden gelme eğilimindedir.

Ses Çifti

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

Sesle birleştirilmiş haptikler: Uygulama için ipuçları

Sese bağlı haptiklerin uygulanması, hem ses hem de haptik kanalların içerik oynatımına ilişkin temel bir anlayış gerektirir. Aşağıdaki noktaları aklınızda bulundurun.

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

    • Özel bir meta veri anahtarına ( ANDROID_HAPTIC ardından birkaç dokunsal kanal) sahip OGG formatındaki varlıklar, dokunma verilerinin varlığını ve MediaPlayer ve SoundPool ile oynatmayı SoundPool .
  • audio_policy_configuration.xml dokunma ve ses çalma desteğini audio_policy_configuration.xml .

    • AUDIO_CHANNEL_OUT_HAPTIC_A|B kanal AUDIO_CHANNEL_OUT_HAPTIC_A|B ile bir çıktı profili kullanın.
    • Dokunsal kanallara sahip bir çıktı akışı için, dokunsal kanalların verilerde ekstra kanallar olarak sunulduğunu unutmayın.

    Misal

    Çıkış akışı için kanal maskesi aşağıdaki gibi 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)

    dokunsal kanalı oynamak için false .

    • Varsayılan olarak, dokunsal kanallar sessizdir ( true ).
    • Kullanım örnekleri arasında zil sesleri ve senkronize dokunma ve geri bildirim içeren UI sesleri bulunur.
  • Vibratör HAL, harici kontrol desteği uygulamalıdır.

Sesle Birleştirilmiş Haptikler

Şekil 8. Sesle bağlantılı haptiklerin uygulanması