Dokunsal çerçeve için UX temeli

Dokunsal bilgiler 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 prensipler vızıltılı titreşimin net dokunsal bilgilerle değiştirilmesini ve zengin dokunsal özelliklerin keşfedilmesini içermektedir.

Kullanıcı Deneyimi İlkeleri

Şekil 1. Mevcut ilkeler

Aşağıdaki tabloda mevcut tüm dokunsal API'ler listelenmektedir.

API'si Yöntemler Yıl eklendi
android.view.HapticFeedbackConstants
  • CONTEXT_CLICK
  • CLOCK_TICK
  • VIRTUAL_KEY
  • KEYBOARD_TAP
  • UZUN BASMA
2016'dan önce
  • KEYBOARD_PRESS
  • KEYBOARD_RELEASE
  • TEXT_HANDLE_MOVE
  • VIRTUAL_KEY_RELEASE
2017 (Android8)
  • ONAYLAMAK
  • REDDETMEK
  • GESTURE_START
  • GESTURE_END
2020 (Android11)
android.Görünüm
  • PerformHapticFeedback()
2016'dan önce
android.os.Vibratör
  • titreşim()
  • hasVibrator()
2016'dan önce
  • hasAmplitüdKontrol()
2017 (Android8)
  • areAllEffectsDesteklenir()
  • areAllPrimitivesSupported()
  • areEffectsDesteklenen()
  • arePrimitivesSupported()
2020 (Android11)
android.os.VibrationEffect
  • createOneShot()
  • createWaveform()
2017 (Android8)
  • EFFECT_TICK
  • EFFECT_CLICK
  • EFFECT_HEAVY_CLICK
  • EFFECT_DOUBLE_CLICK
  • createÖntanımlı()
2019 (Android10)
android.os.VibrationEffect.Composition
  • PRIMITIVE_TICK
  • PRIMITIVE_CLICK
  • addPrimitive()
  • oluştur()
2020 (Android11)
android.media.AudioAttributes.Builder
  • setHapticChannelsMated()
2019 (Android10)

Vızıltı titreşimi

Ç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 hoş olmayan duyulabilir sesler üreten eski donanım bileşenleri, düşük kaliteli izlenimler (örneğin, ucuz, bozuk bir telefon) sunarak dokunsal kullanıcı deneyimine zarar verebilir.

Net dokunuşlar

Net dokunsal özellikler, ayrı durum değişikliklerinin (örneğin, açma/kapama işlemi sırasındaki ikili değişiklikler) hissini destekler. Ayrık sağlamanın doğası gereği, net dokunsal efektler tek bir varlık olarak üretilir (örneğin, bir giriş olayı başına bir dokunsal etki).

Android, vızıltılı veya yumuşak hisler yerine güçlü ancak keskin hislerle net dokunsal bilgiler sunmayı amaçlıyor.

Net dokunsal özellikleri 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 Etkisinde:

  • EFFECT_CLICK
  • EFFECT_DOUBLE_CLICK
  • EFFECT_HEAVY_CLICK
  • EFFECT_TICK

Cihaz üreticileri ve geliştiriciler arasında ortak bilgi oluşturmak, Android ekosistemindeki genel dokunsal kaliteyi 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. Basıp bırakma.

Zengin dokunsallık

Zengin dokunsal, tek dürtüye dayalı etkilerin ötesine geçen, büyüyen bir dokunsal kategoridir. Android, yüksek düzeyde şekillendirilebilirlik ve ayarlanabilirlik ile iyi düzeyde ayrıntı düzeyine sahip zengin dokunsal özellikleri desteklemeyi amaçlamaktadır. Aşağıdaki kullanım örnekleri Android 11 veya daha düşük sürümlerde desteklenir.

Zengin Dokunuş

Şekil 4. Kayan dokuya sahip zengin dokunsal özellikler

Sürükleme ve Kaydırma

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

Kullanım örneği 1: Kayan doku

Parmak bir dokunmatik yüzey üzerinde kayarken dokunsal bir etki tekrarlanıyorsa (örneğin, sürükleme, kaydırma, hayalet dokunsal dokuyla yüzeyi keşfetme), tekrarlanan dokunsal etkiler tercihen net ve incelikli olur.

Eğer bireysel etki keskin değil de vızıltılı ise, o zaman tekrarlar arasındaki aralıkların silinmesi muhtemeldir. Sonuç, birden fazla ayrık sinyal yerine uzun bir vızıltıdır.

Genlik yeterince ince değilse, o zaman algılanan dokunsal enerji tekrar yoluyla birikir ve tekrarın sonunda çok güçlü bir dokunsal enerji ortaya çıkar.

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

HapticFeedbackConstants CLOCK_TICK ve TEXT_HANDLE_MOVE kullanın. Bu sabitler tekrarlama ve genlik özelliklerini önceden tanımlar.

Kendi efektinizi yaratın

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

Kullanım senaryosu 2: Kolay kullanım efektli 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ılanabilen dikkatsel dokunsal hisler üretebilir. Ancak sessiz bir ortamda ani ve uzun bir titreşim, kullanıcıları ürkütebilir ve sıklıkla duyulabilir uğultu sesleri üretir. Daha hoş bir uzun titreşim oluşturmak için, uzun titreşimin başlangıcında rahatlama efektini uygulayın. Bu, hedef genliğe doğru gelişen yumuşak bir genlik geçişi üretir.

Kolaylık efektini uygulama

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

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

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

Uzun Titreşim

Şekil 6. Uzun titreşim kolaylaştırma eğrisi

Kullanım örneği 3: Ses bağlantılı dokunsal özellikler

Sesle birleştirilmiş dokunsallar, kullanıcının dikkatini çekmek için sesin ritmiyle birleştirilmiş dokunsal desenlerdir.

Ses bağlantılı dokunsal özellikler: Faydaları

Ses bağlantılı dokunsal etkiyi uygulamak için net dokunsal özellikleri uzun titreşimlerle birleştirin. Net dokunsal duyulardan gelen güçlü ama kısa dokunsal duyumlar, ayrı ritmik kalıplar sunar. Uzun titreşimin sağladığı yüksek seviyedeki uyarılarla birleştiğinde bu, kullanıcının dikkatini çekme konusunda harika bir iş çıkarır.

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

Ses Çifti

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

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

Sesle eşleştirilmiş dokunsal özelliklerin 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 formatındaki varlıklar ( ANDROID_HAPTIC ve ardından bir dizi dokunsal kanal), dokunsal verilerin varlığını ve MediaPlayer ve SoundPool ile oynatıldığını gösterir.
  • audio_policy_configuration.xml dosyasında dokunma ve ses oynatma desteğini belirtin.

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

    Örnek

    Çıkış akışının 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

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

    • Varsayılan olarak dokunsal kanalların sesi kapatılmıştır ( true ).
    • Kullanım örnekleri arasında eşzamanlı dokunma ve geri bildirim içeren zil sesleri ve kullanıcı arayüzü sesleri yer alır.
  • Vibratör HAL harici kontrol desteğini uygulamalıdır.

Ses Bağlantılı Dokunuşlar

Şekil 8. Ses bağlantılı dokunsal uygulama

Ses bağlantılı dokunsal: Dokunsal Jeneratör

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

Haptic Generator architecture

Şekil 9. Haptic Generator mimarisi

Dokunsal üreteç algoritmanızın yüksek kaliteli dokunsal ürettiğinden emin olmak için, ses dalga biçimlerine uyguladığı filtre zincirini yapılandıran parametreleri ayarlayarak oluşturma algoritmasını cihazın titreşim motoruna göre ayarlayın. Bu bölümde bu parametreler ayrıntılı olarak açıklanmakta ve bunları donanım özelliklerine göre nasıl ayarlayacağınız açıklanmaktadır.

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

    Titreşim rezonans frekansı, dokunsal bir aktüatörün maksimum çıkışa sahip olduğu frekanstır. Bu parametre, daha geniş bir bant genişliği elde etmek amacıyla, bir anti-rezonatörü, yanıt aktarım fonksiyonunu kısmen düzleştirecek şekilde ayarlar. Android çerçevesi bu değeri otomatik olarak Vibratör HAL yöntemi IVibrator.getResonantFrequency çıkışına bağlar.

    Bu parametrenin varsayılan değeri 150Hz'dir . Bu, buradaki kodda değiştirilebilir.

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

    Bu parametre kısmi normalizasyondaki (otomatik kazanç kontrolü) üssü belirler. Varsayılan değeri -0,8'dir ; bu, dinamik aralık değişiminin %80'inin bu kazanç kontrol adımıyla ortadan 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 parametreyle belirlenir:

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

    • Kutup Q, bant durdurma filtresindeki kutupların kalite faktörü.

    Bu iki değerin oranı, düşük frekansları artırmak ve algoritma yanıtını genişletmek amacıyla rezonansın bastırılmasını sınırlar. Örneğin, Sıfır Q için 8 ve Kutup Q için 4 varsayılan değerleri, rezonans bastırmayı 2 (6 dB) faktörüyle sınırlayarak 2'lik bir oran üretir. Android çerçevesi her iki değeri de Vibratör HAL yöntemi IVibrator.getQFactor çıktısı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ı veya her ikisini de 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. Distorsiyon 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çiş filtresi 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, giriş dalga biçimine uygulanan, düşük frekanslı sinyallerin genliğini azaltan ve yüksek frekanslı olanları 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ğinin varsayılan değeri 0,1'dir .

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

    Bu filtrenin uyguladığı 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 tepkilerini çizmenizi ve frekans tepkilerinin farklı parametre değerleriyle nasıl değiştiğini gözlemlemenizi öneririz.

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

    Bu parametre son titreşim genliğini kontrol eder. Bu, titreşim genliklerini 1'den daha düşük bir değerle sınırlayan yumuşak bir 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 takırdadığını duyabiliyorsanız değeri azaltın.