Dokunsal uygulama

Cihaz üreticileri genellikle her cihaz için oluşturulan özel varlıkların sahibi olarak kabul edilir. Bu nedenle mühendislik çalışmaları genellikle cihaz bazında yoğunlaşır; Ekosistemdeki diğer cihazların tutarlılığı için çok az çaba harcanıyor veya hiç çaba gösterilmiyor.

Tam tersine geliştiriciler, her cihazın teknik özelliklerine bakılmaksızın ekosistemdeki tüm Android telefonlarda çalışan uygulamalar oluşturmaya çalışıyor. Yaklaşımdaki bu farklılık, parçalanma sorununa neden olabilir; örneğin, belirli telefonların donanım özellikleri, uygulama geliştiricileri tarafından belirlenen beklentilerle eşleşmiyor. Dolayısıyla, dokunsal API'ler bazı Android telefonlarda çalışıyor ancak diğerlerinde çalışmıyorsa sonuç tutarsız bir ekosistemdir. Bu nedenle donanım yapılandırması, üreticilerin Android dokunsal API'lerini her cihaza uygulayabilmesini sağlamada kritik bir rol oynuyor.

Bu sayfa, Android dokunsal API'lerinin en iyi şekilde kullanılması için donanım uyumluluğunu ayarlamak üzere adım adım bir kontrol listesi sağlar.

Aşağıdaki şekil, uyumlu bir ekosistem oluşturmada kritik bir adım olan cihaz üreticileri ve geliştiriciler arasında ortak bilgi oluşturmayı göstermektedir.

Uygulama geliştiricileri ve cihaz üreticileri için dokunsal kullanım senaryolarının şeması

Şekil 1. Cihaz üreticileri ve geliştiriciler arasında bilgi oluşturma

Haptics uygulama kontrol listesi

  1. Sabitleri uygula

    • Dokunsal uygulama için sabitlerin listesi.
  2. HAL ve API arasındaki sabitleri eşleyin

  3. Donanımı değerlendirin

    • Hedefin dokunsal etkilerine ilişkin talimatlar. Donanımınızda hızlı kontroller gerçekleştirmek için bu talimatları kullanın.

Aşağıda bu adımların her birini daha ayrıntılı olarak inceleyeceğiz.

1. Adım: Sabitleri uygulayın

Cihazınızın dokunsal uygulama için minimum gereksinimleri karşılayıp karşılamadığını belirlemek için bu kontrolleri gerçekleştirin.

Dokunsal uygulama sürecinin akış şeması

Şekil 2. Etkilerin uygulanması

İlkellerin uygulanmasına yönelik adımların akış şeması

Şekil 3. İlkellerin uygulanması

Aşağıdaki dokunsal sabitlerin uygulama durumunu kontrol edin.

Dokunsal sabitler Konumlar ve özetler
EFFECT_TICK , EFFECT_CLICK , EFFECT_HEAVY_CLICK , EFFECT_DOUBLE_CLICK VibrationEffect sınıfı
VibrationEffect dokunsal sabitler herhangi bir giriş olayı kavramını içermez ve hiçbir kullanıcı arayüzü öğesi içermez. Sabitler bunun yerine, createPredefined() tarafından çağrılan EFFECT_CLICK ve EFFECT_HEAVY_CLICK gibi enerji seviyeleri kavramını içerir.
PRIMITIVE_TICK , PRIMITIVE_CLICK , PRIMITIVE_LOW_TICK> , PRIMITIVE_SLOW_RISE , PRIMITIVE_QUICK_RISE , PRIMITIVE_QUICK_FALL , PRIMITIVE_SPIN , PRIMITIVE_THUD VibrationEffect.Composition sınıfı
VibrationEffect.Composition dokunsal sabitlerin addPrimitive(int primitiveId, float scale, int delay) tarafından çağrılan ölçeklenebilir yoğunluğa sahip olmasına izin verilir.

Aşağıda açıklanan alternatif titreşimler, VibrationEffect sabitlerini uygulamayan cihazlarda gerçekleştirilir. Bu tür cihazlarda en iyi performansı gösterecek şekilde bu yapılandırmaların güncellenmesi önerilir.

  1. EFFECT_CLICK

    VibrationEffect.createWaveform ile oluşturulan dalga biçimi titreşimi ve frameworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern konumunda yapılandırılan zamanlamalar.

  2. EFFECT_HEAVY_CLICK

    VibrationEffect.createWaveform ile oluşturulan dalga biçimi titreşimi ve frameworks/base/core/res/res/values/config.xml##config_longPressVibePattern konumunda yapılandırılan zamanlamalar.

  3. EFFECT_DOUBLE_CLICK

    VibrationEffect.createWaveform ve zamanlamalarla (0, 30, 100, 30) oluşturulan dalga biçimi titreşimi.

  4. EFFECT_TICK

    VibrationEffect.createWaveform ile oluşturulan dalga biçimi titreşimi ve frameworks/base/core/res/res/values/config.xml##config_clockTickVibePattern konumunda yapılandırılan zamanlamalar.

Dokunsal geri bildirimi test etmeye yönelik adımların akış şeması

Şekil 4. Geri bildirim sabitlerinin uygulanması

Aşağıdaki genel geri bildirim sabitlerinin durumunu kontrol edin.

Dokunsal sabitler Konumlar ve özetler
CLOCK_TICK , CONTEXT_CLICK , KEYBOARD_PRESS , KEYBOARD_RELEASE , KEYBOARD_TAP , LONG_PRESS , TEXT_HANDLE_MOVE , VIRTUAL_KEY , VIRTUAL_KEY_RELEASE , CONFIRM , REJECT , GESTURE_START , GESTURE_END HapticFeedbackConstants sınıfı
HapticFeedbackConstants dokunsal sabitler performHapticFeedback() tarafından çağrılan KEYBOARD_PRESS ve KEYBOARD_RELEASE gibi belirli kullanıcı arayüzü öğeleriyle giriş olaylarına yardımcı olur.

Adım 2: HAL ve API arasındaki sabitleri eşleyin

Adım 2, genel HAL sabitleri ile API sabitleri arasında önerilen eşlemeleri sunar. Adım 1'de değerlendirilen donanım HAL sabitlerini uygulamıyorsa, benzer çıktılar oluşturmak amacıyla Adım 1'de açıklanan geri dönüş modellerini güncellemek için Adım 2 kullanılmalıdır. Eşleme iki farklı varsayılan modelle desteklenir.

  • Ayrık model (basit)

    • Genlik bu modelin temel değişkenidir. HAL'deki her varlık farklı bir dokunsal genliği temsil eder.
    • Bu model, temel dokunsal kullanıcı deneyimini uygulamak için gereken minimum gereksinimdir.
    • Daha gelişmiş bir dokunsal kullanıcı deneyimi, gelişmiş donanım ve gelişmiş bir model (sürekli model) gerektirir.
  • Sürekli model (gelişmiş)

    • Doku ve genlik bu modelin temel değişkenleridir. HAL'deki her varlık farklı dokunsal dokuları temsil eder. Her HAL öğesinin genliği ölçek faktörü ( S ) tarafından kontrol edilir.
    • Bu model gelişmiş donanım gerektirir. OEM'ler, VibrationEffect.Composition ile gelişmiş dokunsal UX kullanmak istiyorsa (en son dokunsal API'lerin en iyi kullanımı için), donanımlarını bu modeli kullanarak uygulamanız önerilir.

Ayrık model

API'de sağlanan tüm genel sabitlerin uygun HAL sabitleriyle eşlenmesi önerilir. Bu işleme başlamak için, cihazın HAL'de ayrı genliğe sahip kaç tane dokunsal dalga formu tanımlayabildiğini öğrenin. Bu kavram etrafında yapılandırılmış belirli bir soru şuna benzer: Telefonumda, insan tarafından algılanabilen genlik farklılıklarına sahip kaç tane tek darbeli dokunsal etki tanımlanabilir? Bu sorunun cevabı haritalamayı belirler.

HAL sabitlerinin tanımlanması donanıma bağlı bir işlemdir. Örneğin, giriş seviyesi bir telefon, yalnızca tek bir dokunsal dalga biçimi üretecek donanım özelliklerine sahip olabilir. Daha gelişmiş donanım bileşenlerine sahip cihazlar, daha geniş bir aralıkta ayrı genlik seviyeleri üretir ve HAL'de birden fazla dokunsal dalga biçimi tanımlayabilir. HAL-API sabit eşlemesi, HAL sabitini alır (orta genliği temel olarak kullanır), ardından daha güçlü veya daha zayıf efektleri buradan düzenler.

HAL sabit aralığı ve geri besleme genliklerinin şeması

Şekil 5. Genliğe göre HAL sabit aralığı

Ayrı genliğe sahip HAL sabitlerinin sayısı tanımlandığında, HAL ve API sabitlerini HAL sabitlerinin sayısına göre eşlemenin zamanı gelmiştir. Bu haritalama işlemi, tek bir dürtü API sabitini üç adede kadar ayrı genlik düzeyi grubuna bölebilir. API sabitlerinin bölümlere ayrılma şekli, eşlik eden giriş olaylarına yönelik UX ilkelerine dayanmaktadır. Daha fazla bilgi için bkz. Haptics UX tasarımı .

HAL-API sabit eşlemesi için ayrık model

Şekil 6. HAL-API sabit eşlemesi: Ayrık model

Cihazınız ayrı genliklere sahip yalnızca iki HAL sabitini destekliyorsa Orta ve Yüksek genlik düzeyindeki HAL sabitlerini birleştirmeyi düşünün. Bu kavramın pratikteki bir örneği, EFFECT_CLICK ve EFFECT_HEAVY_CLICK aynı HAL sabitiyle eşlemek olabilir; bu sabit, Orta genlik seviyesi HAL sabitidir. Cihazınız ayrı genliğe sahip yalnızca bir HAL sabitini destekliyorsa, üç seviyenin tümünü tek bir seviyede birleştirmeyi düşünün.

Sürekli model

HAL sabitlerini tanımlamak için genlik ölçeklenebilirliğine sahip sürekli model uygulanabilir. Ölçeklendirilmiş HAL'yi ( HAL_H0 x S ) üretmek için HAL sabitlerine (örneğin, HAL_H0 , HAL_H1 ) bir ölçek faktörü ( S ) uygulanabilir. Bu durumda, ölçeklendirilmiş HAL, şekil 7'de gösterildiği gibi API sabitlerini ( HAL_H0 x S1 = H0S1 = EFFECT_TICK ) tanımlamak için eşlenir. Sürekli modelin genlik ölçeklenebilirliğini kullanarak, bir cihaz, farklı dokulara sahip az sayıda HAL sabitini depolayabilir. ve ölçek faktörünü ( S ) ayarlayarak genlik değişimleri ekleyin. Cihaz üreticileri, sağlamak istedikleri farklı dokunsal doku sayısına bağlı olarak HAL sabitlerinin sayısını tanımlayabilir.

Doku ve genliğe göre HAL sabit aralığı

Şekil 7. Dokuya (HAL_H0) ve genlik ölçeğine (S) göre HAL sabit aralığı

HAL-API sabit eşlemesi için sürekli model

Şekil 8. HAL-API sabit eşlemesi: Sürekli model

Sürekli modelde, farklı HAL sabitleri farklı genliklerden ziyade farklı dokunsal dokuları temsil eder; ölçek faktörü ( S ) genliği yapılandırabilir. Ancak doku algısı (örneğin keskinlik) süre ve genlik algısıyla ilişkili olduğundan doku ve ölçek faktörünün birleştirilmesi (HAL-API haritalamanın tasarım sürecinde) önerilir.

Şekil 7, genlik ölçeklenebilirliği ile bir HAL'den birçok API sabitine kadar varyasyonu artırarak sabit haritalamayı göstermektedir.

Varyasyonun Artırılması 1

Varyasyonun Artırılması 2

Şekil 9. Genlik ölçeklenebilirliğiyle artan varyasyon

VibrationEffect.Composition PRIMITIVE_TICK ve PRIMITIVE_CLICK gibi tüm ölçeklenebilir API sabitleri için, API sabitinin enerji düzeyi, API sabiti addPrimitive(int primitiveID, float scale, int delay) aracılığıyla bildirildiğinde float scale parametresine bağlıdır. PRIMITIVE_TICK ve PRIMITIVE_CLICK farklı HAL sabitleri kullanılarak net bir ayrımla tasarlanabilmektedir. Dokuya çeşitlilik eklemek istiyorsanız bu yaklaşım önerilir.

3. Adım: Donanımı değerlendirin

Donanım değerlendirmesi, bu spesifik değerlendirme için Etki 1, 2 ve 3 olarak etiketlenen üç dokunsal etkinin tanımlanmasını içerir.

Etki 1: Önceden tanımlanmış kısa dokunsal sabitler

VibrationEffect.EFFECT_CLICK sabiti, 2. Adımda sağlanan HAL-API eşlemesindeki temel etki veya ortak paydadır. En çok kullanılan efekt olan HapticFeedbackConstants.KEYBOARD_PRESS ile eşlenir. Bu etkinin değerlendirilmesi, hedef cihazınızın net dokunsal algılamaya hazır olup olmadığının belirlenmesine yardımcı olur.

Efekt 2: Kısa özel dokunsal efekt

VibrationEffect.createOneShot(20,255) sabiti özel dokunsal efektler içindir. Kısa, tek özel darbeler için süreyi tanımlamak için önerilen maksimum eşik 20 ms'dir. 20 ms'den uzun tek bir darbe , vızıltı titreşimi olarak algılandığından önerilmez.

Kısa özel dokunsal efektin dalga biçimi

Şekil 10. Kısa özel dokunsal efekt

Efekt 3: Genlik değişimiyle uzun özel dokunsal efekt

VibrationEffect.createWaveform(timings[], amplitudes[], int repeat) sabiti, genlik değişimine sahip uzun özel efektler içindir. Özel dokunsal efektler için değişen genlikler üretme yeteneği, cihazın zengin dokunsal efektler için yeteneklerini değerlendirmeye yönelik göstergelerden biridir. Önerilen timings [] ve amplitudes [] sırasıyla {500, 500} ve {128, 255} tir; bu, 500 ms örnekleme hızıyla %50'den %100'e artan bir genlik eğilimi sunar.

Genlik değişimine sahip dokunsal efekt dalga formu

Şekil 11. Genlik değişimiyle uzun özel dokunsal efekt

Efekt 3 için genlik kontrolünün donanım özelliklerini kontrol etmek için Vibrator.hasAmplitudeControl() yöntemini kullanın. VibrationEffect.createWaveform amaçlandığı gibi değişken genlikte yürütülmesi için sonucun true olması gerekir.

Sübjektif dokunsal etki değerlendirmesinin akış şeması

Şekil 12. Dokunsal etki 1, 2 ve 3'ün konu değerlendirmesi

Sübjektif bir değerlendirme yapın

Hızlı bir tutarlılık kontrolü için öncelikle öznel bir değerlendirme yapın. Sübjektif değerlendirmenin amacı, cihazın insan tarafından algılanabilen genliklerde haptikler üretip üretemeyeceğini belirlemek için dokunsal etkilerin genliğini gözlemlemektir.

Bu kavram etrafında şekillenen spesifik bir soru şu şekildedir: Cihaz, beklendiği gibi kullanıcılara kolayca algılanabilen dokunsal etkiler üretebiliyor mu? Bu soruyu yanıtlamak, kullanıcıların hissedemeyeceği algılanamayan dokunmalar veya dalga biçimlerinin amaçlandığı gibi desenler üretmediği istenmeyen dokunmalar da dahil olmak üzere başarısız dokunmatiklerden kaçınmanıza yardımcı olur.