Dokunmatik cihazlar

Android, aşağıdakiler gibi çeşitli dokunmatik ekranları ve dokunmatik alanları destekler: ekran kalemi tabanlı dijitalleştirici tabletler.

Dokunmatik ekranlar, kullanıcının ekrandaki öğeleri doğrudan kontrol ettiği izlenimi verecek şekilde bir ekranla ilişkilendirilmiş dokunmatik cihazlardır.

Dokunmatik yüzeyler, ekranla ilişkili olmayan dokunmatik cihazlardır (ör. sayısallaştırıcı tablet). Dokunmatik yüzeyler genellikle nişan alma veya kullanıcı arayüzünün mutlak dolaylı konumlandırma veya harekete dayalı denetimi.

Dokunmatik cihazlarda, işlevleri fare düğmelerine benzeyen düğmeler bulunabilir.

Dokunmatik cihazlar bazen çeşitli araçlar kullanılarak manipüle edilebilir. gibi parmaklar veya ekran kalemi gibi sinyaller kullanır.

Dokunmatik cihazlar bazen sanal tuşları uygulamak için kullanılır. Örneğin, bazı Android cihazlarda, dokunmatik ekranın sensör alanı ekranı ve dokunmaya duyarlı tuş takımının bir parçası olarak ikili amaca hizmet eder.

Dokunmatik cihazların çok çeşitli olması nedeniyle Android çok sayıda özellikleri ve istenen davranışı açıklayan yapılandırma özellikleri her bir cihaz için geçerli.

Dokunmatik cihaz sınıflandırması

Aşağıdaki koşulların her ikisi de geçerliyse giriş cihazı çoklu dokunmatik cihaz olarak sınıflandırılır:

  • Giriş cihazı, ABS_MT_POSITION_X ve ABS_MT_POSITION_Y mutlak eksen.
  • Giriş cihazında herhangi bir oyun kumandası düğmesi yok. Bu koşul Eksenleri kodlu olarak bildiren bazı oyun kumandalarıyla ilgili belirsizliği giderir bir boyut oluşturmanız gerekir.

Giriş cihazı, aşağıdaki koşulların her ikisi de geçerliyse tek dokunmalı cihaz olarak sınıflandırılır: şu koşullar geçerlidir:

  • Giriş cihazı, çok noktalı bir cihaz olarak sınıflandırılmamış. Giriş cihazları, tek dokunuşlu cihaz veya çok dokunuşlu cihaz olarak sınıflandırılır.
  • Giriş cihazı, ABS_X ve ABS_Y mutlaklarının varlığını bildirir eksenleri ve BTN_TOUCH anahtar kodunun varlığıdır.

Bir giriş cihazı dokunmatik cihaz olarak sınıflandırıldığında, cihaz üzerinde sanal anahtarların sayısı, sanal anahtar eşleme dosyası yüklenmeye çalışılarak belirlenir. cihaz için. Sanal anahtar haritası varsa cihazın anahtar düzeni dosyası da yüklenir. Bu dosyaların konumu ve biçimi hakkında bilgi edinmek için [Sanal anahtar haritası dosyaları](#virtual-key-map-files) bölümüne bakın.

Ardından sistem, dokunmatik cihazın giriş cihazı yapılandırma dosyasını yükler.

Tüm yerleşik dokunmatik cihazlarda giriş cihazı yapılandırma dosyaları bulunmalıdır. Giriş cihazı yapılandırma dosyası yoksa sistem, harici USB veya Bluetooth HID dokunmatik ekranlar ya da dokunmatik yüzeyler gibi genel amaçlı dokunmatik çevre birimleri için uygun bir varsayılan yapılandırma seçer. Bu varsayılan ayarlar yerleşik dokunmatik ekranlar için tasarlanmamıştır ve yanlış davranışa yol açabilir.

Giriş cihazı yapılandırması yüklendikten sonra sistem, giriş cihazını dokunmatik ekran, dokunmatik yüzey veya işaretçi cihaz olarak sınıflandırır.

  • Ekrandaki nesneleri doğrudan değiştirmek için dokunmatik ekran cihazı kullanılır. Kullanıcı doğrudan ekrana dokunduğundan sistem gösteren nesneleri göstermek için manipüle edilmişti.
  • Mutlak konumlandırma bilgileri sağlamak için dokunmatik alan cihazı kullanılır dokunmalarla ilgili bir uygulama ekleyebilirsiniz. Yararlı olabilir dijitalleştirici tabletler için.
  • İşaretçi cihaz, ekrandaki nesnelerin dolaylı yoldan işlenmesi için kullanılır. imleçle kontrol edin. Parmaklar, çoklu dokunma işaretçisi olarak yorumlanır hareketler. Dokunmatik kalemler gibi diğer araçlar, mutlak konumlar kullanılarak yorumlanır. Daha fazla bilgi için Dolaylı çoklu dokunma işaretçi hareketleri başlıklı makaleyi inceleyin.

Giriş cihazını dokunmatik ekran, dokunmatik alan veya işaretçi cihaz olarak sınıflandırmak için aşağıdaki kurallar kullanılır.

  • touch.deviceType özelliği ayarlanırsa cihaz türü belirtilen şekilde ayarlanır.
  • Giriş cihazı, INPUT_PROP_DIRECT varlığını bildirirse giriş özelliği varsa (EVIOCGPROP ioctl ile) cihaz türü dokunmatik ekran olarak ayarlayın. Bu koşul, doğrudan giriş dokunmasının cihazlar aynı anda bağlı bir ekrana bağlı.
  • Giriş cihazı, INPUT_PROP_POINTER varlığını bildirirse giriş özelliği (EVIOCGPROP ioctl ile), ardından cihaz türü işaretçi olarak ayarlayın.
  • Giriş cihazı REL_X veya REL_Y göreli eksenlerinin varlığını bildirirse cihaz türü dokunmatik yüzey olarak ayarlanır. Bu koşul hem fare hem de fareden oluşan giriş cihazları için belirsizliği giderir dokunmatik yüzey. Bu durumda, fare zaten işaretçiyi kontrol ettiğinden dokunmatik yüzey işaretçiyi kontrol etmek için kullanılmaz.
  • Aksi takdirde, cihaz türü işaretçi olarak ayarlanır. Bu varsayılan ayar, başka bir özel amaç için atanmamış dokunmatik yüzeylerin işaretçiyi kontrol etmesini sağlar.

Düğmeler

Düğmeler, uygulamaların aşağıdaki işlemler için kullanabileceği isteğe bağlı kontrollerdir ek işlevler sunar. Dokunmatik cihazlardaki düğmeler fare düğmelerine benzer şekilde çalışır ve çoğunlukla işaretçi türü dokunmatik cihazlarda veya ekran kalemi ile kullanılır.

Aşağıdaki düğmeler desteklenir:

  • BTN_LEFT: MotionEvent.BUTTON_PRIMARY ile eşlendi.
  • BTN_RIGHT: MotionEvent.BUTTON_SECONDARY ile eşlendi.
  • BTN_MIDDLE: MotionEvent.BUTTON_MIDDLE ile eşlendi.
  • BTN_BACK ve BTN_SIDE: MotionEvent.BUTTON_BACK ile eşlendi. Bu düğmeye basıldığında tuşa basma işlemi de tuş koduyla sentezlenir KeyEvent.KEYCODE_BACK
  • BTN_FORWARD ve BTN_EXTRA: Eşlendi MotionEvent.BUTTON_FORWARD. Bu düğmeye basıldığında tuşa basma işlemi de sentezlenir KeyEvent.KEYCODE_FORWARD anahtar koduyla yazın.
  • BTN_STYLUS: MotionEvent.BUTTON_SECONDARY ile eşlendi.
  • BTN_STYLUS2: MotionEvent.BUTTON_TERTIARY ile eşlendi.

Araçlar ve araç türleri

Alet, etkileşimde bulunmak için kullanılan parmak, ekran kalemi veya diğer aygıtlardır cihazı kontrol edin. Bazı dokunmatik cihazlar farklı cihazları, oluşturacağız.

Android'in diğer bölümlerinde ve MotionEvent API'de olduğu gibi, araçlar genellikle işaretçi olarak adlandırılır.

Aşağıdaki araç türleri desteklenir:

  • BTN_TOOL_FINGER ve MT_TOOL_FINGER: MotionEvent.TOOL_TYPE_FINGER ile eşlenmiştir.
  • BTN_TOOL_PEN ve MT_TOOL_PEN: Eşlendi MotionEvent.TOOL_TYPE_STYLUS.
  • BTN_TOOL_RUBBER: MotionEvent.TOOL_TYPE_ERASER ile eşlendi.
  • BTN_TOOL_BRUSH: MotionEvent.TOOL_TYPE_STYLUS ile eşlendi.
  • BTN_TOOL_PENCIL: MotionEvent.TOOL_TYPE_STYLUS ile eşlendi.
  • BTN_TOOL_AIRBRUSH: MotionEvent.TOOL_TYPE_STYLUS ile eşlendi.
  • BTN_TOOL_MOUSE: MotionEvent.TOOL_TYPE_MOUSE ile eşlendi.
  • BTN_TOOL_LENS: MotionEvent.TOOL_TYPE_MOUSE ile eşlendi.
  • BTN_TOOL_DOUBLETAP, BTN_TOOL_TRIPLETAP ve BTN_TOOL_QUADTAP: MotionEvent.TOOL_TYPE_FINGER ile eşlendi.

Fareyle üzerine gelme ve dokunma araçları

Araçlar, dokunmatik cihazla temas halinde olabilir veya kapsama alanında olup cihazın üzerinde durabilir. Bazı dokunmatik cihazlar, dokunmatik cihazın üzerinde duran bir aracın varlığını algılayamaz. RF tabanlı ekran kalemi dönüştürücüler gibi bu özelliği sunan dönüştürücüler, genellikle kalemin dönüştürücünün sınırlı bir aralığında olduğunda bunu algılayabilir.

InputReader bileşeni, dokunma araçlarını fareyle üzerine gelmeden ayırır araçlar. Benzer şekilde, dokunma araçları ve fareyle üzerine gelme araçları uygulamalara farklı şekillerde raporlanır.

Dokunma araçları, MotionEvent.ACTION_DOWN, MotionEvent.ACTION_MOVE, MotionEvent.ACTION_DOWN, MotionEvent.ACTION_POINTER_DOWN ve MotionEvent.ACTION_POINTER_UP kullanılarak uygulamalara dokunma etkinlikleri olarak bildirilir.

Fareyle üzerine gelme araçları, MotionEvent.ACTION_HOVER_ENTER, MotionEvent.ACTION_HOVER_MOVE ve MotionEvent.ACTION_HOVER_EXIT kullanılarak uygulamalara genel hareket etkinlikleri olarak raporlanır.

Dokunmatik cihaz sürücüsüyle ilgili gereksinimler

  • Dokunmatik cihaz sürücüleri, eksenlere ilişkin yalnızca eksenleri ve tuş kodlarını kaydetmelidir ve düğmeleri ve desteklerini görebilirsiniz. Desteklenmeyen eksenlerin veya anahtar kodlarının kaydedilmesi, cihaz sınıflandırma algoritmasını karıştırabilir ya da sistemin cihazın özelliklerini yanlış algılamasına neden olabilir. Örneğin, cihaz BTN_TOUCH anahtar kodu, sistem BTN_TOUCH öğesinin, aracın güvenli olup olmadığını belirtmek için her zaman kullanıldığını varsayar dokunun. Bu nedenle, BTN_TOUCH araç yalnızca kapsama alanında ve üzerinde duruyor.
  • Tek dokunuşlu cihazlar aşağıdaki Linux giriş etkinliklerini kullanır:
    • ABS_X: (ZORUNLU) Aracın X koordinatını bildirir.
    • ABS_Y: (ZORUNLU) Aracın Y koordinatını bildirir.
    • ABS_PRESSURE: (isteğe bağlı) Araç ucuna uygulanan fiziksel basıncı veya dokunma temas noktasının sinyal gücünü bildirir.
    • ABS_TOOL_WIDTH: (isteğe bağlı) Şunun kesit alanını veya genişliğini bildirir: veya aracın kendisinin temas noktasıdır.
    • ABS_DISTANCE: (isteğe bağlı) Aracın yüzeyle olan mesafesini bildirir cihazındaki.
    • ABS_TILT_X: (isteğe bağlı) Dokunmatik cihazın yüzeyine göre X ekseni boyunca aracın eğimini bildirir.
    • ABS_TILT_Y: (isteğe bağlı) Aracın eğimini ekranın yüzeyinden bildirir. Y ekseninde dokunma cihazı.
    • BTN_TOUCH: (ZORUNLU) Aracın olanak tanır.
    • BTN_LEFT, BTN_RIGHT, BTN_MIDDLE, BTN_BACK, BTN_SIDE, BTN_FORWARD, BTN_EXTRA, BTN_STYLUS, BTN_STYLUS2: (isteğe bağlı) Raporlar düğmesi durumları.
    • BTN_TOOL_FINGER, BTN_TOOL_PEN, BTN_TOOL_RUBBER, BTN_TOOL_BRUSH, BTN_TOOL_PENCIL, BTN_TOOL_AIRBRUSH, BTN_TOOL_MOUSE, BTN_TOOL_LENS, BTN_TOOL_DOUBLETAP, BTN_TOOL_TRIPLETAP, BTN_TOOL_QUADTAP: (isteğe bağlı) Araç türünü bildirir.
  • Çoklu dokunma özellikli cihazlar aşağıdaki Linux giriş etkinliklerini kullanır:
    • ABS_MT_POSITION_X: (ZORUNLU) Aracın X koordinatını bildirir.
    • ABS_MT_POSITION_Y: (ZORUNLU) Aracı Y koordinatını bildirir.
    • ABS_MT_PRESSURE: (isteğe bağlı) Uygulanan fiziksel baskıyı bildirir. veya dokunma temasının sinyal gücü.
    • ABS_MT_TOUCH_MAJOR: (isteğe bağlı) Sütunun kesit alanını bildirir dokunma teması veya dokunulan kişinin daha uzun boyutunun uzunluğu.
    • ABS_MT_TOUCH_MINOR: (isteğe bağlı) Daha kısa boyutun uzunluğunu bildirir otomatik olarak oluşturulur. ABS_MT_TOUCH_MAJOR için bu eksen kullanılmamalıdır raporlama özelliğini kullanın.
    • ABS_MT_WIDTH_MAJOR: (isteğe bağlı) Aracın kesit alanını veya aracın en uzun boyutunun uzunluğunu bildirir. Aracın boyutlarını bilmiyorsanız bu ekseni kullanmayın.
    • ABS_MT_WIDTH_MINOR: (isteğe bağlı) Daha kısa boyutun uzunluğunu bildirir çok önemli. ABS_MT_WIDTH_MAJOR bir alan ölçümü raporluyorsa veya aracın boyutları bilinmiyorsa bu eksen kullanılmamalıdır.
    • ABS_MT_ORIENTATION: (isteğe bağlı) Aracın yönünü bildirir.
    • ABS_MT_DISTANCE: (isteğe bağlı) Aracın dokunmatik cihazın yüzeyine olan mesafesini bildirir.
    • ABS_MT_TOOL_TYPE: (isteğe bağlı) Aracı türünü MT_TOOL_FINGER veya MT_TOOL_PEN olarak bildirir.
    • ABS_MT_TRACKING_ID: (isteğe bağlı) Aracın izleme kimliğini bildirir. İzleme kimliği, ve birden fazla araç etkin olduğunda her aracı ayrı ayrı izleyebilirsiniz. Örneğin, birden fazla parmağa dokunulduğunda her parmağa farklı bir parmak temasta kaldığı sürece kullanılan izleme kimliğidir. İzleme Kimlikleri sonradan yeniden kullanılabilir.
    • ABS_MT_SLOT: (isteğe bağlı) Linux çoklu dokunma protokolü "B". Daha fazla bilgi için Linux çoklu dokunma protokolü dokümanlarını inceleyin.
    • BTN_TOUCH: (ZORUNLU) Aracın olanak tanır.
    • BTN_LEFT, BTN_RIGHT, BTN_MIDDLE, BTN_BACK, BTN_SIDE, BTN_FORWARD, BTN_EXTRA, BTN_STYLUS, BTN_STYLUS2: (isteğe bağlı) Raporlar düğmesi durumu.
    • BTN_TOOL_FINGER, BTN_TOOL_PEN, BTN_TOOL_RUBBER, BTN_TOOL_BRUSH, BTN_TOOL_PENCIL, BTN_TOOL_AIRBRUSH, BTN_TOOL_MOUSE, BTN_TOOL_LENS, BTN_TOOL_DOUBLETAP, BTN_TOOL_TRIPLETAP, BTN_TOOL_QUADTAP: (isteğe bağlı) Araç türünü bildirir.
  • Hem tek dokunma hem de çoklu dokunma protokolü için eksenler tanımlanırsa yalnızca çoklu dokunma eksenleri kullanılır ve tek dokunma eksenleri yoksayılır.
  • ABS_X, ABS_Y, ABS_MT_POSITION_X ve ABS_MT_POSITION_Y eksenlerinin minimum ve maksimum değerleri, cihaza özgü yüzey birimlerinde cihazın etkin alanının sınırlarını tanımlar. Dokunmatik ekranlarda etkin alan, dokunmatik cihazın ekranı kaplayan kısmını tanımlar.

    Dokunmatik ekran için, sistem bildirilen dokunma etkisini otomatik olarak dokunma konumlarını elde etmek için bu yüzeylere bağlı olarak, yüzey birimlerinin şu hesaplamaya:

        displayX = (x - minX) * displayWidth / (maxX - minX + 1)
        displayY = (y - minY) * displayHeight / (maxY - minY + 1)
        

    Dokunmatik ekran, bildirilen etkin alanın dışındaki temasları bildirebilir.

    Etkin alanın dışında başlatılan dokunuşlar uygulamalara iletilmez ancak sanal anahtarlar için kullanılabilir.

    Etkin alan içinde başlatılan veya ekrana giren ve ekrandan çıkan dokunmalar uygulamalara teslim edilir. Dolayısıyla bir dokunma sonra da etkin alanın dışına çıkar. Uygulama, alan adının ötesindeki veya negatif olan dokunma etkinlikleri sınırlarını içerir. Bu, beklenen bir durumdur.

    Dokunmatik cihazlar, dokunma koordinatlarını hiçbir zaman etkin alanın sınırlarına sıkıştırmamalıdır. Bir dokunma etkin alandan çıkarsa etkin alanın dışında olarak raporlanmalı veya hiç raporlanmamalıdır.

    Örneğin, kullanıcının parmağı ekranın sol üst köşesine yakınsa koordinatını (minX, minY) raporlayabilir. Parmak devam ederse hareket etmek için önce, dokunmatik ekran minX ve minY’den küçük bileşenlere sahip raporlama koordinatları; (minX - 2, minY - 3) yoksa dokunmayı bildirmeyi tamamen durdurmalıdır. Diğer bir deyişle, dokunmatik ekran, kullanıcının parmağı etkin alanın dışındayken (minX, minY) değerini bildirmemelidir.

    Dokunma koordinatlarını ekran kenarına sabitlemek, ekranın kenarının etrafında yapay bir sert sınır oluşturur. Bu sınır, sistemin ekran alanının sınırlarına giren veya bu sınırlardan çıkan hareketleri sorunsuz bir şekilde izlemesini engeller.

  • ABS_PRESSURE veya ABS_MT_PRESSURE tarafından raporlanan değerler (raporlanıyorlarsa) araç cihaza dokunuyorsa sıfırdan farklı, araç fareyle üzerine gelip dokunmuyorsa sıfır olmalıdır.

    Baskıyla ilgili bilgilerin raporlanması isteğe bağlıdır ancak kesinlikle önerilir. Uygulamalar, basınca duyarlı çizim ve diğer efektleri uygulamak için basınç bilgilerini kullanabilir.

  • ABS_TOOL_WIDTH, ABS_MT_TOUCH_MAJOR, ABS_MT_TOUCH_MINOR, ABS_MT_WIDTH_MAJOR veya Araç, ABS_MT_WIDTH_MINOR değerinde sıfır olmamalıdır cihaza dokunulduğundan, aksi takdirde sıfıra dokunulduğundan emin olabilirsiniz, ancak bu gerekli değildir. Örneğin, dokunma cihazı parmak dokunma temaslarının boyutunu ölçebilir ancak ekran kalemi dokunma temaslarının boyutunu ölçemeyebilir.

    Raporlama boyutu bilgileri isteğe bağlıdır ancak kesinlikle önerilir. Uygulamalar, boyuta duyarlı çizim ve diğer efektleri uygulamak için basınç bilgilerini kullanabilir.

  • ABS_DISTANCE veya ABS_MT_DISTANCE tarafından bildirilen değerler sıfıra yaklaşır. Mesafe sıfır olmayabilir bağlantı kurulabilir. Bildirilen tam değerler, donanımın mesafeyi ölçme şekline bağlıdır.

    Raporlama mesafesi bilgileri isteğe bağlıdır ancak şunun için önerilir: ekran kalemi cihazları.

  • ABS_TILT_X ve ABS_TILT_Y tarafından bildirilen değerler sıfır olmalıdır dik durmasına izin verir. Sıfır olmayan bir eğim, tutulduğu anlamına gelebilir.

    X ve Y eksenleri boyunca eğme açılarının, dik açıya göre derece cinsinden belirtildiği varsayılır. Merkez noktası (tam olarak dik), her eksen için (max + min) / 2 ile belirtilir. Merkez noktadan daha küçük değerler yukarı veya sola, merkez noktadan daha büyük değerler ise aşağı veya sağa eğilme anlamına gelir.

    InputReader, X ve Y eğim bileşenlerini 0 ile PI / 2 radyan arasında değişen bir dik eğim açısına ve -PI ile PI radyan arasında değişen bir düzlemsel yönelim açısına dönüştürür. Bu temsil sonucunda yön ve yönünün belirlenmesinde kullanılan parmak dokunuşları.

    Eğilme bilgilerini bildirmek isteğe bağlıdır ancak ekran kalemi kullanan cihazlar için önerilir.

  • Araç türü ABS_MT_TOOL_TYPE tarafından raporlanırsa BTN_TOOL_* tarafından raporlanan tüm araç türü bilgilerinin yerini alır. Hiçbir alet türü bilgisi yoksa alet türü varsayılan olarak MotionEvent.TOOL_TYPE_FINGER olur.

  • Bir aracın etkin olup olmadığı aşağıdaki koşullara göre belirlenir:

    • Tek dokunma protokolünü kullanırken araç şu durumlarda etkindir: BTN_TOUCH. veya BTN_TOOL_* 1'dir.

      Bu koşul, InputReader'ün, dokunup dokunmadığı veya en azından araç türü hakkında en azından bazı bilgilere sahip olması gerektiği anlamına gelir. Bilgi yoksa aracın etkin olmadığı (aralık dışında) varsayılır.

    • "A" çoklu dokunma protokolü kullanıldığında, en son senkronizasyon raporunda göründüğü her zaman araç etkindir. Araç, senkronizasyon raporlarında görünmeyi bıraktığında kullanımdan kaldırılır.
    • "B" çoklu dokunma protokolünü kullanırken araç etkin bir zaman aralığı var. Yuva açıldığında araç kaldırılır.
  • Bir aracın aşağıdaki koşullara göre fareyle üzerine geldiği belirlenir:
    • Araç BTN_TOOL_MOUSE veya BTN_TOOL_LENS ise aşağıdaki koşullardan biri doğru olsa bile araç fareyle üzerine getirilmemiştir.
    • Araç etkinse ve sürücü basınç bilgisi veriyorsa ve bildirilen basınç sıfır ise araç fareyle üzerine gelmektedir.
    • Araç etkinse ve sürücü BTN_TOUCH anahtar kodunu destekliyorsa ve BTN_TOUCH sıfır değerine sahipse araç fareyle üzerine gelinmiş durumdadır.
  • InputReader hem "A" hem de "B" çoklu dokunma protokolünü destekler. Yeni sürücüler 'B'yi kullanmalıdır her ikisi de çalışır.
  • Android 4.0'tan itibaren, dokunmatik ekran sürücülerinin Linux giriş protokolü spesifikasyonuna uyması için değiştirilmesi gerekebilir.

    Aşağıdaki değişiklikler gerekebilir:

    • Bir araç devre dışı kaldığında (parmak "yukarı" kalktığında) gösterimi durmalıdır raporlarından yararlanabilirsiniz. Tüm araçlar devre dışı kaldığında (tüm parmaklar "yukarı" konuma geldiğinde) sürücü, SYN_MT_REPORT ve ardından SYN_REPORT gibi boş bir senkronizasyon raporu paketi göndermelidir.

      Android'in önceki sürümlerinin "yükseltilmesi" bekleniyor göndererek bildirilecek etkinlikler basınç değeri 0'dır. Eski davranış, Linux giriş protokolü spesifikasyonuyla uyumlu değildi ve artık desteklenmiyor.

    • Fiziksel basınç veya sinyal gücü bilgileri ABS_MT_PRESSURE

      Android'in önceki sürümleri, basınç bilgilerini ABS_MT_TOUCH_MAJOR'ten alıyordu. Eski davranış Linux giriş protokolü spesifikasyonu ve artık desteklenmiyor.

    • Dokunma boyutu bilgileri ABS_MT_TOUCH_MAJOR kullanılarak raporlanmalıdır.

      Android'in önceki sürümleri, boyut bilgilerini şuradan aldı: ABS_MT_TOOL_MAJOR Eski davranış Linux giriş protokolü spesifikasyonu ve artık desteklenmiyor.

    Dokunmatik cihaz sürücüleri için artık Android'e özel özelleştirmeler gerekmiyor. Android, standart Linux giriş protokolüne dayanarak, değiştirilmemiş sürücüleri kullanarak harici HID çoklu dokunmatik ekranlar gibi daha fazla dokunmatik çevre birimi destekleyebilir.

Dokunmatik cihaz işlemi

Aşağıda, Android'deki dokunmatik cihaz işleminin kısa bir özeti verilmiştir.

  1. EventHub, evdev sürücüsünden ham etkinlikleri okur.
  2. InputReader, ham etkinlikleri tüketir ve her aracın konumu ve diğer özellikleriyle ilgili dahili durumu günceller. Aynı zamanda düğmesi durumlarını kontrol edin.
  3. GERİ veya İLERİ düğmesine basıldıysa ya da düğme bırakıldıysa InputReader, InputDispatcher'i önemli etkinlik hakkında bilgilendirir.
  4. InputReader, sanal bir tuşa basma işleminin yapılıp yapılmadığını belirler. Öyleyse, InputDispatcher adlı kullanıcıyı önemli etkinlik hakkında bilgilendirir.
  5. InputReader, dokunmanın sınırlarını içerir. Bu durumda, dokunma etkinliği hakkında InputDispatcher'ü bilgilendirir.
  6. Dokunma aracı yoksa ancak en az bir fareyle üzerine gelme aracı varsa InputReader, fareyle üzerine gelme etkinliği hakkında InputDispatcher'u bilgilendirir.
  7. Dokunmatik cihaz türü işaretçi ise InputReader işaretçiyi kullanır. hareket algılama, işaretçiyi ve noktaları uygun şekilde hareket ettirir ve İşaretçi etkinliği hakkında InputDispatcher.
  8. InputDispatcher, etkinliklerin gönderilip gönderilmeyeceğini ve cihazı uyandırıp uyandırmayacağını belirlemek için WindowManagerPolicy'ı kullanır. Ardından InputDispatcher, etkinlikleri uygun uygulamalara yayınlar.

Dokunmatik cihaz yapılandırması

Dokunmatik cihaz davranışı, cihazın eksenleri, düğmeleri, giriş özellikleri, giriş cihazı yapılandırması, sanal tuş haritası ve tuş düzenine göre belirlenir.

Klavye yapılandırmasında yer alan dosyalar hakkında daha fazla bilgi için aşağıdaki bölümlere bakın:

Özellikler

Sistem, yapılandırmak için birçok giriş cihazı yapılandırma özelliğini kullanır ve dokunmatik cihaz davranışını kalibre etmek.

Bunun bir nedeni, dokunmatik cihazların cihaz sürücülerinin genellikle dokunma özelliklerini cihaza özgü birimler kullanarak bildirmesidir.

Örneğin, birçok dokunmatik cihaz, dokunmayla temas alanını ölçer toplam sayısı gibi dahili cihaza özgü bir ölçek kullanarak dokunmayla tetiklenen sensör düğümleri bulunur. Bu ham boyut değeri, dokunmatik cihaz sensör düğümlerinin fiziksel boyutu ve diğer özellikleri hakkında bilgi sahibi olmaları gerektiğinden uygulamalar için anlamlı olmaz.

Sistem, dokunmatik cihaz tarafından raporlanan değerlerin kodunu çözmek, dönüştürmek ve normalleştirmek için giriş cihazı yapılandırma dosyalarında kodlanmış kalibrasyon parametrelerini kullanır. Bu değerler, uygulamaların anlayabileceği daha basit bir standart temsile dönüştürülür.

Belgelendirme kuralları

Belgelendirme amacıyla, kalibrasyon işlemi sırasında sistem tarafından kullanılan değerleri açıklamak için aşağıdaki kuralları kullanırız.

Ham eksen değerleri

Aşağıdaki ifadeler, dokunmatik cihaz sürücüsü tarafından EV_ABS etkinlikleri olarak raporlanan ham değerleri gösterir.

raw.x
ABS_X veya ABS_MT_POSITION_X ekseninin değeri.
raw.y
ABS_Y veya ABS_MT_POSITION_Y ekseninin değeri.
raw.pressure
ABS_PRESSURE veya ABS_MT_PRESSURE ekseninin değeri ya da 0 ise kullanılamaz.
raw.touchMajor
ABS_MT_TOUCH_MAJOR ekseninin değeri; yoksa 0.
raw.touchMinor
ABS_MT_TOUCH_MINOR ekseninin değeri veya mevcut değilse raw.touchMajor.
raw.toolMajor
ABS_TOOL_WIDTH veya ABS_MT_WIDTH_MAJOR ekseninin değeri ya da aşağıdaki durumlarda 0 kullanılamaz.
raw.toolMinor
ABS_MT_WIDTH_MINOR ekseninin değeri veya değilse raw.toolMajor kullanılabilir.
raw.orientation
ABS_MT_ORIENTATION ekseninin değeri; yoksa 0.
raw.distance
ABS_DISTANCE veya ABS_MT_DISTANCE ekseninin değeri ya da mevcut değilse 0.
raw.tiltX
ABS_TILT_X ekseninin değeri veya mevcut değilse 0.
raw.tiltY
ABS_TILT_Y ekseninin değeri; yoksa 0.

Ham eksen aralıkları

Aşağıdaki ifadeler, işlenmemiş değerlerin sınırlarını gösterir. Bunlar, her eksen için EVIOCGABS ioctl çağırarak oluşturulur.

raw.*.min
Ham eksenin dahili minimum değeri.
raw.*.max
Ham eksenin kapsayıcı maksimum değeri.
raw.*.range
raw.*.max - raw.*.min etiketine eş değer.
raw.*.fuzz
Ham eksenin doğruluğu. Ör. fuzz = 1, değerlerin +/- 1 birim doğrulukta olduğunu gösterir.
raw.width
Dokunma alanının dahil genişliği (raw.x.range + 1 ile eşdeğerdir).
raw.height
raw.y.range + 1 ile eşdeğer olan dokunma alanının dahili yüksekliği.

Çıkış aralıkları

Aşağıdaki ifadeler çıkış koordinat sisteminin özelliklerini gösterir. Sistem, dokunma pozisyonu bilgisini Dokunmatik cihaz tarafından kullanılan yüzey birimlerini, şu anda görüntü pikselleri gibi uygulamalara bildirilebilir.

output.width
Çıkış genişliği. Dokunmatik ekranlar (bir ekranla ilişkilendirilmiş) için bu piksel cinsinden görüntü genişliğidir. Dokunmatik yüzeyler (bir ekranla ilişkili değil) için çıkış genişliği raw.width'e eşittir. Bu, hiçbir enterpolasyonun yapılmadığını gösterir.
output.height
Çıkış yüksekliği. Dokunmatik ekranlar (bir ekranla ilişkili) için bu, ekranın piksel cinsinden yüksekliğidir. Dokunmatik yüzeyler için (ekranla ilişkili olmayan) çıkış yüksekliği raw.height değerine eşittir ve bu, interpolasyon olmadığını gösterir. yardımcı olur.
output.diag
Çıkış koordinat sisteminin köşegen uzunluğu; eşdeğeri sqrt(output.width ^2 + output.height ^2).

Temel yapılandırma

Dokunmatik giriş eşleyici, kalibrasyon değerlerini belirtmek için giriş cihazı yapılandırma dosyasında birçok yapılandırma özelliği kullanır. Aşağıdaki tabloda bazı genel amaçlı yapılandırma özellikleri açıklanmaktadır. Diğer tüm özellikler, kalibre etmek için kullanıldıkları alanlarla birlikte aşağıdaki bölümlerde açıklanmaktadır.

dokunmatik.cihazTürü

Tanım: touch.deviceType = touchScreen | touchPad | pointer | default

Dokunmatik cihaz türünü belirtir.

  • Değer touchScreen ise dokunmatik cihaz, ilişkilendirilmiş bir dokunmatik ekrandır ekran görüntülenir.

  • Değer touchPad ise dokunmatik cihaz, ilişkilendirilmemiş bir dokunmatik alandır ekran görüntülenir.

  • Değer pointer ise dokunmatik cihaz, ekranla ilişkili olmayan bir dokunmatik yüzeydir ve hareketleri dolaylı çoklu dokunmatik işaretçi hareketleri için kullanılır.

  • Değer default ise sistem, sınıflandırma algoritmasına göre cihaz türünü otomatik olarak algılar.

Cihaz türünün dokunmatik cihazın davranışını nasıl etkilediği hakkında daha fazla bilgi için Sınıflandırma bölümüne bakın.

Android 3 ve önceki sürümlerde tüm dokunmatik cihazların dokunmatik ekran olduğu varsayılır.

touch.orientationAware

Tanım: touch.orientationAware = 0 | 1

Dokunmatik cihazın ekran yönü değişikliklerine tepki verip vermeyeceğini belirtir.

  • Değer 1 ise dokunmatik cihaz tarafından bildirilen dokunma konumları döndürülür her zaman ayarlayabilirsiniz.

  • Değer 0 ise dokunmatik cihaz tarafından raporlanan dokunma konumları, ekran yönünde yapılan değişikliklerden etkilenmez.

Cihaz dokunmatik ekransa varsayılan değer 1 (0) aksi takdirde.

Sistem, iç ve dış dokunmatik ekranlar ile ekranlar arasında ayrım yapar. Yöne duyarlı dahili dokunmatik ekran, yöne göre döndürüldü dahili ekranın görüntüsü. Yöne duyarlı harici dokunmatik ekran, harici ekranın yönüne göre döndürülür.

Yön farkındalığı, cihazlardaki dokunmatik ekranların döndürülmesini desteklemek için kullanılır bazı cihazlar var. Örneğin, cihaz doğal yöneliminden saat yönünde 90 derece döndürüldüğünde, dokunmaların mutlak konumları yeniden eşlenir. Böylece, dokunmatik ekranın mutlak koordinat sisteminin sol üst köşesindeki bir dokunma, ekranın döndürülmüş koordinat sisteminin sol üst köşesindeki bir dokunma olarak raporlanır. Bu, dokunmaların farklı koordinat sistemiyle bildirilmesi için yapılır kullandığının bir yoludur.

Honeycomb'dan önce tüm dokunmatik cihazların yön duyarlı olduğu varsayılıyordu.

touch.gestureMode

Tanım: touch.gestureMode = pointer | spots | default

İşaretçi hareketleri için sunu modunu belirtir. Bu yapılandırma özelliği yalnızca dokunmatik cihaz işaretçi türünde olduğunda kullanılabilir.

  • Değer pointer ise dokunmatik alan hareketleri imleç aracılığıyla sunulur benzer özellikler sunar.

  • Değer spots ise dokunmatik yüzey hareketleri, hareketin ağırlık merkezini temsil eden bir ankraj ve parmakların konumunu temsil eden bir dizi dairesel noktayla gösterilir.

INPUT_PROP_SEMI_MT giriş özelliği ayarlandığında varsayılan değer pointer, aksi takdirde spots olur.

X ve Y alanları

X ve Y alanları, temas alanının merkezi için konum bilgisi sağlar.

Hesaplama

Hesaplama basittir: Dokunmatik sürücüden gelen konum bilgileri, çıkış koordinat sistemine doğrusal olarak ara yerleştirilir.

xScale = output.width / raw.width
yScale = output.height / raw.height

If not orientation aware or screen rotation is 0 degrees:
output.x = (raw.x - raw.x.min) * xScale
output.y = (raw.y - raw.y.min) * yScale
Else If rotation is 90 degrees:
    output.x = (raw.y - raw.y.min) * yScale
    output.y = (raw.x.max - raw.x) * xScale
Else If rotation is 180 degrees:
    output.x = (raw.x.max - raw.x) * xScale
    output.y = (raw.y.max - raw.y) * yScale
Else If rotation is 270 degrees:
    output.x = (raw.y.max - raw.y) * yScale
    output.y = (raw.x - raw.x.min) * xScale
End If

TouchMajor, TouchMinor, toolMajor, toolMinor, boyut alanları

touchMajor ve touchMinor alanları yaklaşık boyutları açıklar. çıktı birimleri (piksel) cinsinden iletişim alanının

toolMajor ve toolMinor alanları yaklaşık boyutları açıklar. aracın çıkış birimleri (piksel) cinsinden ifade eder.

size alanı, dokunmaya göre normalleştirilmiş dokunma boyutunu tanımlar. Dokunmatik cihazın algılayabileceği mümkün olan en geniş dokunma hareketi. En küçük olası normalleştirilmiş boyut 0,0 (temassız veya ölçülemez) ve en büyük olası normalleştirilmiş boyut 1,0'dır (sensör alanı doymuş).

Hem yaklaşık uzunluk hem de genişlik ölçülebiliyorsa touchMajor alanı daha uzun boyutu belirtir, touchMinor alanı ise daha kısa boyutu belirtir tanımlanabilir. Temas alanının yalnızca yaklaşık çapı ölçülebiliyorsa touchMajor ve touchMinor alanları eşittir.

Benzer şekilde, toolMajor alanı daha uzun boyutu ve toolMinor alanı, aracın kesit alanının daha kısa olan boyutunu belirtir.

Dokunma boyutu kullanılamıyorsa ancak araç boyutu mevcutsa araç boyutu dokunma boyutuna eşit olarak ayarlandı. Öte yandan, araç boyutu mevcut değilse Ancak dokunma boyutu kullanılabiliyorsa dokunma boyutu araç boyutuna eşit olur.

Dokunmatik cihazlar, dokunma boyutunu ve araç boyutunu çeşitli yollarla ölçer veya bildirir. Mevcut uygulama, üç farklı ölçüm türünü desteklemektedir: çap, alan ve geometrik sınırlayıcı kutucuğu görebilirsiniz.

Tanım: touch.size.calibration = none | geometric | diameter | area | default

Dokunmatik sürücünün ve araç boyutunuz da olabilir.

  • Değer none ise boyut sıfır olarak ayarlanır.

  • Değer geometric ise boyutun aynı yüzey birimlerini konum olarak ayarladığından aynı şekilde ölçeklendirilir.

  • Değer diameter ise boyutun, dokunma veya aracın çapına (genişliğine) orantılı olduğu varsayılır.

  • Değer area ise boyutun dokunulan veya aletin bulunduğu alandır.

  • Değer default ise sistem, raw.touchMajor veya raw.toolMajor ekseni mevcutsa geometric kalibrasyonunu, aksi takdirde none kalibrasyonunu kullanır.

touch.size.scale

Tanım: touch.size.scale = <negatif olmayan kayan nokta sayısı>

Kalibrasyonda kullanılan sabit bir ölçeklendirme faktörünü belirtir.

Varsayılan değer: 1.0.

touch.size.bias

Tanım: touch.size.bias = <pozitif olmayan kayan nokta sayısı>

Kalibrasyonda kullanılan sabit ağırlık değerini belirtir.

Varsayılan değer: 0.0.

touch.size.isSummed

Tanım: touch.size.isSummed = 0 | 1

Boyutun, tüm etkin kişilerin boyutlarının toplamı olarak mı yoksa her kişi için ayrı ayrı mı raporlandığını belirtir.

  • Değer 1 ise bildirilen boyut sayıya bölünür görüşmeden önce görünür.

  • Değer 0 ise raporlanan boyut olduğu gibi kullanılır.

Varsayılan değer 0 değeridir.

Bazı dokunmatik cihazlar (özellikle "Yarı MT" cihazlar) birden fazla temas noktasının boyutlarını ayırt edemediğinden, toplam alanlarını veya genişliklerini temsil eden bir boyut ölçümü raporlar. Bu özellik yalnızca Bu tür cihazlar için 1. Emin değilseniz bu değeri 0 olarak ayarlayın.

Hesaplama

touchMajor, touchMinor, toolMajor, toolMinor, ve size alanları, belirtilen kalibrasyon parametrelerine bağlıdır.

If raw.touchMajor and raw.toolMajor are available:
    touchMajor = raw.touchMajor
    touchMinor = raw.touchMinor
    toolMajor = raw.toolMajor
    toolMinor = raw.toolMinor
Else If raw.touchMajor is available:
    toolMajor = touchMajor = raw.touchMajor
    toolMinor = touchMinor = raw.touchMinor
Else If raw.toolMajor is available:
    touchMajor = toolMajor = raw.toolMajor
    touchMinor = toolMinor = raw.toolMinor
Else
    touchMajor = toolMajor = 0
    touchMinor = toolMinor = 0
    size = 0
End If

size = avg(touchMajor, touchMinor)

If touch.size.isSummed == 1:
    touchMajor = touchMajor / numberOfActiveContacts
    touchMinor = touchMinor / numberOfActiveContacts
    toolMajor = toolMajor / numberOfActiveContacts
    toolMinor = toolMinor / numberOfActiveContacts
    size = size / numberOfActiveContacts
End If

If touch.size.calibration == "none":
    touchMajor = toolMajor = 0
    touchMinor = toolMinor = 0
    size = 0
Else If touch.size.calibration == "geometric":
    outputScale = average(output.width / raw.width, output.height / raw.height)
    touchMajor = touchMajor * outputScale
    touchMinor = touchMinor * outputScale
    toolMajor = toolMajor * outputScale
    toolMinor = toolMinor * outputScale
Else If touch.size.calibration == "area":
    touchMajor = sqrt(touchMajor)
    touchMinor = touchMajor
    toolMajor = sqrt(toolMajor)
    toolMinor = toolMajor
Else If touch.size.calibration == "diameter":
    touchMinor = touchMajor
    toolMinor = toolMajor
End If

If touchMajor != 0:
    output.touchMajor = touchMajor * touch.size.scale + touch.size.bias
Else
    output.touchMajor = 0
End If

If touchMinor != 0:
    output.touchMinor = touchMinor * touch.size.scale + touch.size.bias
Else
    output.touchMinor = 0
End If

If toolMajor != 0:
    output.toolMajor = toolMajor * touch.size.scale + touch.size.bias
Else
    output.toolMajor = 0
End If

If toolMinor != 0:
    output.toolMinor = toolMinor * touch.size.scale + touch.size.bias
Else
    output.toolMinor = 0
End If

output.size = size

basınç alanı

pressure alanı, kaplumbağaya uygulanan yaklaşık fiziksel basıncı 0,0 (dokunma yok) ile 1,0 (normal basınç) arasında normalleştirilmiş bir değer olarak dokunmatik cihaza dokunun.

Sıfır basınç, aracın imleci üzerinde olduğunu gösterir.

touch.pressure.calibration

Tanım: touch.pressure.calibration = none | physical | amplitude | default

Basıncı bildirmek için dokunmatik sürücü tarafından kullanılan ölçüm türünü belirtir.

  • Değer none ise basınç bilinmediği için için 0,0'a basın.

  • Değer physical ise basınç ekseninin gerçek zaman aralığını dokunmatik alana uygulanan fiziksel basınç yoğunluğu.

  • Değer amplitude ise basınç ekseninin, temasın boyutu ve uygulanan basınçla ilgili olan sinyal genliğini ölçtüğü varsayılır.

  • Değer default ise sistem şu durumda physical kalibrasyonunu kullanır: basınç ekseni mevcut, aksi takdirde none kullanır.

dokunma.baskı.ölçeklendirmesi

Tanım: touch.pressure.scale = <negatif olmayan kayan nokta sayısı>

Kalibrasyonda kullanılan sabit bir ölçek faktörünü belirtir.

Varsayılan değer 1.0 / raw.pressure.max değeridir.

Hesaplama

pressure alanının hesaplanması, belirtilen kalibrasyon parametrelerine bağlıdır.

If touch.pressure.calibration == "physical" or "amplitude":
    output.pressure = raw.pressure * touch.pressure.scale
Else
    If hovering:
        output.pressure = 0
    Else
        output.pressure = 1
    End If
End If

yön ve yatırma alanları

orientation alanı, dokunma ve aracın yönünü açısal ölçüm olarak tanımlar. 0 yönü, ana eksenin dikey olarak -PI/2, ana eksenin sola yönelik olduğunu gösterir, PI/2, ana eksenin sağa yöneldiğini gösterir. Bir ekran kalemi aracı mevcut olduğunda, yön aralığı -PI veya PI'ten başlayarak tam bir daire aralığında açıklanabilir.

tilt alanı, aracın eğimini açısal ölçüm olarak tanımlar. 0 eğimi, aracın yüzeye dik olduğunu gösterir. PI/2 eğik çizgisi, aracın yüzey üzerinde düz olduğunu gösterir.

touch.orientation.calibration

Tanım: touch.orientation.calibration = none | interpolated | vector | default

Yönlendirmeyi bildirmek için dokunmatik sürücü tarafından kullanılan ölçüm türünü belirtir.

  • Değer none ise yön bilinmediği için 0 olarak ayarlanır.
  • Değer interpolated ise yön, doğrusal olarak interpolasyon yapar ve böylece bir raw.orientation.min değerinin ham değeri -PI/2 ile, ham değeri ise raw.orientation.max, PI/2 ile eşleşiyor. Odak noktası olan (raw.orientation.min + raw.orientation.max) / 2, 0 ile eşleşiyor.
  • Değer vector ise yön, aynı boyuta sahip paketlenmiş bir vektör olarak bir dizi imzalı 4 bitlik resimden oluşur. Bu gösterim, Atmel Nesne Tabanlı Protokol parçalarında kullanılır. Kodu çözülen vektör, bir yön açısı ve güven düzeyi büyüklüğü verir. Güven büyüklüğü, boyut bilgisini ölçeklendirmek için kullanılır. ancak geometrik olmadığı sürece.
  • Değer default ise sistem, yön ekseni mevcutsa interpolated kalibrasyonunu, aksi takdirde none değerini kullanır.

Hesaplama

orientation ve tilt alanlarının hesaplanması, belirtilen kalibrasyon parametreleri ve kullanılabilir giriştir.

If touch.tiltX and touch.tiltY are available:
    tiltXCenter = average(raw.tiltX.min, raw.tiltX.max)
    tiltYCenter = average(raw.tiltY.min, raw.tiltY.max)
    tiltXAngle = (raw.tiltX - tiltXCenter) * PI / 180
    tiltYAngle = (raw.tiltY - tiltYCenter) * PI / 180
    output.orientation = atan2(-sin(tiltXAngle), sinf(tiltYAngle))
    output.tilt = acos(cos(tiltXAngle) * cos(tiltYAngle))
Else If touch.orientation.calibration == "interpolated":
    center = average(raw.orientation.min, raw.orientation.max)
    output.orientation = PI / (raw.orientation.max - raw.orientation.min)
    output.tilt = 0
Else If touch.orientation.calibration == "vector":
    c1 = (raw.orientation & 0xF0) >> 4
    c2 = raw.orientation & 0x0F

    If c1 != 0 or c2 != 0:
        If c1 >= 8 Then c1 = c1 - 16
        If c2 >= 8 Then c2 = c2 - 16
        angle = atan2(c1, c2) / 2
        confidence = sqrt(c1*c1 + c2*c2)

        output.orientation = angle

        If touch.size.calibration == "diameter" or "area":
            scale = 1.0 + confidence / 16
            output.touchMajor *= scale
            output.touchMinor /= scale
            output.toolMajor *= scale
            output.toolMinor /= scale
        End If
    Else
        output.orientation = 0
    End If
    output.tilt = 0
Else
    output.orientation = 0
    output.tilt = 0
End If

If orientation aware:
    If screen rotation is 90 degrees:
        output.orientation = output.orientation - PI / 2
    Else If screen rotation is 270 degrees:
        output.orientation = output.orientation + PI / 2
    End If
End If

mesafe alanı

distance alanı, araç ile dokunmatik cihaz yüzeyi arasındaki mesafeyi tanımlar. 0,0 değeri doğrudan teması, daha büyük değerler ise yüzeyden uzaklığının artması anlamına gelir.

dokunma.distance.kalibrasyon

Tanım: touch.distance.calibration = none | scaled | default

Mesafeyi bildirmek için dokunmatik sürücü tarafından kullanılan ölçüm türünü belirtir.

  • Değer none ise mesafe bilinmediği için 0 olarak ayarlanır.

  • Değer scaled ise bildirilen mesafe sabit bir ölçek faktörüyle çarpılır.

  • Değer default ise sistem, mesafe ekseni mevcutsa scaled kalibrasyonunu, aksi takdirde none kalibrasyonunu kullanır.

dokunma.mesafe.ölçek

Tanım: touch.distance.scale = <negatif olmayan kayan nokta sayısı>

Kalibrasyonda kullanılan sabit ölçek faktörünü belirtir.

Varsayılan değer 1.0 değeridir.

Hesaplama

distance alanının hesaplanması, belirtilen kalibrasyon parametrelerine bağlıdır.

If touch.distance.calibration == "scaled":
    output.distance = raw.distance * touch.distance.scale
Else
    output.distance = 0
End If

Örnek

# Input device configuration file for a touch screen that supports pressure,
# size and orientation. The pressure and size scale factors were obtained
# by measuring the characteristics of the device itself and deriving
# useful approximations based on the resolution of the touch sensor and the
# display.
#
# Note that these parameters are specific to a particular device model.
# Different parameters need to be used for other devices.

# Basic Parameters
touch.deviceType = touchScreen
touch.orientationAware = 1

# Size
# Based on empirical measurements, we estimate the size of the contact
# using size = sqrt(area) * 28 + 0.
touch.size.calibration = area
touch.size.scale = 28
touch.size.bias = 0
touch.size.isSummed = 0

# Pressure
# Driver reports signal strength as pressure.
#
# A normal index finger touch typically registers about 80 signal strength
# units although we don't expect these values to be accurate.
touch.pressure.calibration = amplitude
touch.pressure.scale = 0.0125

# Orientation
touch.orientation.calibration = vector

Uyumluluk notları

Android Ice Cream Sandwich 4.0'ta dokunmatik cihazların yapılandırma özellikleri önemli ölçüde değişti. Dokunmatik cihazlara ait tüm giriş cihazı yapılandırma dosyaları, yeni yapılandırma özelliklerini kullanacak şekilde güncellenmelidir.

Eski dokunmatik cihaz sürücülerinin de güncellenmesi gerekebilir.

Sanal tuş eşleme dosyaları

Dokunmatik cihazlar, sanal tuşlar uygulamak için kullanılabilir.

Dokunmatik kontrol cihazının özelliklerine bağlı olarak bunu yapmanın birkaç yolu vardır. Bazı dokunmatik kumandalar, özellikleri otomatik olarak yazılım kayıtlarını ayarlayarak Yumuşak Tuşlar'ı kullanabilirsiniz. Bazen de dokunma koordinatlarını anahtar kodlarıyla eşleştirme işleminin yazılımda yapılması istenir.

Sanal anahtarlar yazılımda uygulandığında çekirdek, sanal bir anahtar eşlemesini dışa aktarmalıdır Jamboard özelliği olarak virtualkeys.<devicename> adlı bir dosyayı kullanabilirsiniz. Örneğin, dokunmatik ekran cihaz sürücüleri adını "touchyfeely" olarak bildirirse sanal tuş haritası dosyasının yolu /sys/board_properties/virtualkeys.touchyfeely olmalıdır.

Sanal tuş haritası dosyası, dokunmatik ekrandaki sanal tuşların koordinatlarını ve Linux tuş kodlarını açıklar.

Sanal tuş haritası dosyasına ek olarak, Linux tuş kodlarını Android tuş kodlarıyla eşlemek ve klavye cihazının türünü (genellikle SPECIAL_FUNCTION) belirtmek için ilgili bir tuş düzeni dosyası ve tuş karakter haritası dosyası olmalıdır.

Sözdizimi

Sanal anahtar haritası dosyası, yeni satır veya iki nokta işareti ile ayrılmış bir dizi sanal anahtar düzeni açıklamasından oluşan düz metin dosyasıdır.

Yorum satırları "#" ile başlar ve satırın sonuna kadar devam edin.

Her sanal anahtar, iki nokta üst üste ile ayrılmış 6 bileşenle tanımlanır:

  • 0x01: Sürüm kodu. Her zaman 0x01 olmalıdır.
  • <Linux anahtar kodu>: Sanal anahtarın Linux anahtar kodu.
  • <centerX>: Sanal anahtarın ortasının X piksel koordinatı.
  • <centerY>: Sanal anahtarın ortasının Y piksel koordinatı.
  • <width>: Sanal anahtarın piksel cinsinden genişliği.
  • <height>: Sanal anahtarın piksel cinsinden yüksekliği.

Tüm koordinatlar ve boyutlar, görüntü koordinat sistemi açısından belirtilir.

Burada, tamamı tek satırda yazılmış sanal bir anahtar eşleme dosyası gösterilmektedir.

# All on one line
0x01:158:55:835:90:55:0x01:139:172:835:125:55:0x01:102:298:835:115:55:0x01:217:412:835:95:55

Aynı sanal anahtar eşleme dosyası birden fazla satırda da yazılabilir.

# One key per line
0x01:158:55:835:90:55
0x01:139:172:835:125:55
0x01:102:298:835:115:55
0x01:217:412:835:95:55

Yukarıdaki örnekte dokunmatik ekranın çözünürlüğü 480x800'dür. Buna göre, tüm sanal tuşların <centerY> koordinatı 835'tir. Bu koordinat, dokunmatik ekranın görünür alanının biraz altındadır.

İlk anahtarın Linux tarama kodu 158 (KEY_BACK), centerX değeri 55, centerY değeri 835, width değeri 90 ve height değeri 55'dir.

Örnek

Sanal anahtar haritası dosyası: /sys/board_properties/virtualkeys.touchyfeely.

0x01:158:55:835:90:55
0x01:139:172:835:125:55
0x01:102:298:835:115:55
0x01:217:412:835:95:55

Anahtar düzeni dosyası: /system/usr/keylayout/touchyfeely.kl.

key 158 BACK
key 139 MENU
key 172 HOME
key 217 SEARCH

Anahtar karakter haritası dosyası: /system/usr/keychars/touchyfeely.kcm.

type SPECIAL_FUNCTION

Dolaylı çoklu dokunma işaretçi hareketleri

İşaretçi modunda sistem aşağıdaki hareketleri yorumlar:

  • Bir parmakla dokunma: Tıklama.
  • Tek parmakla hareket etme: İşaretçiyi hareket ettirin.
  • Tek parmak hareketi ve düğme basışları: İşaretçiyi sürükleyin.
  • İki parmağı aynı yönde hareket ettirerek: İşaretçinin altındaki alanı ilgili yönde sürükleyin. İşaretçinin kendisi hareket etmez.
  • Birbirine doğru veya birbirinden ayrılmış iki parmakla yapılan hareket farklı yönlerde kaydırma: işaretçinin etrafındaki alanı kaydırma/ölçeklendirme/döndürme. İşaretçinin kendisi hareket etmez.
  • Birden çok parmakla hareket: serbest biçimli hareket.

Avuç içi reddi

Android 13'ten itibaren sistem, avuç içi girişleri otomatik olarak reddedebilir. yerleşik çerçeve etkinleştirildiğinde. Şirket içi, özel olarak oluşturulmuş çözümler desteklenmeye devam ediyor Bununla birlikte, avuç içine alındığında TOOL_TYPE_PALM işaretini döndürecek şekilde değiştirilmeleri gerekebilir. tespit edilir. Yerleşik çerçeve, özel çözümlerle birlikte de çalışır.

Asıl model, hareket verilerinin ilk 90 ms.lik kısmına, geçerli işaretçiye ve etrafındaki işaretçileri yakınlaştırır, ardından dokunmaların ekranın kenarından ne kadar uzakta olduğunu dikkate alır. Ardından, işaretçi bazında hangi işaretçilerin avuç içi olduğunu belirler. Ayrıca, touchMajor ve touchMinor. Ardından Android çerçevesi, avuç içi olarak işaretlenen işaretçileri dokunma akışından kaldırır.

Uygulamalara zaten bir işaretçi gönderilmişse sistem:

  • (Etkin başka işaretçiler varsa) ACTION_POINTER_UP ve FLAG_CANCELED ayarlanmışken işaretçiyi iptal eder.
  • (Yalnızca bir işaretçi varsa) İşaretçiyi ACTION_CANCEL ile iptal eder.

Herkese açık bir API (MotionEvent.FLAG_CANCELED), geçerli API'nin kullanıcı işlemini tetiklememesi gerekir. Bu bayrak hem ACTION_CANCEL için ayarlandı ve ACTION_POINTER_UP.

Avuç içi işaretçisi uygulamalara gönderilmediyse sistem işaretçiyi bırakır.

Avuç içi reddetme özelliğini etkinleştirme

  1. Dokunmatik sürücünüzde, aşağıdaki alanların çözünürlüğünü ayarlamak için input_abs_set_res makrosunu kullanın (birimler mm başına piksel şeklindedir):
    • ABS_MT_POSITION_X
    • ABS_MT_POSITION_Y
    • ABS_MT_TOUCH_MAJOR
    • ABS_MT_TOUCH_MINOR

    ABS_MT_TOUCH_MINOR desteği isteğe bağlıdır. Ancak cihazınız bunu yapıyorsa destek, çözünürlüğün doğru ayarlandığından emin olun.

  2. Alanların doğru şekilde ayarlandığını onaylamak için şunları çalıştırın:
        $ adb shell getevent -li
    
  3. Özelliği çalışma zamanında etkinleştirmek için:
        $ adb shell device_config put input_native_boot palm_rejection_enabled 1
    
  4. system_server işlemini yeniden başlatın.
         $ adb shell stop && adb shell start
        
  5. adb shell dumpsys input cihazının, avuç içi reddediciler olduğunu gösterdiğini onaylayın UnwantedInteractionBlocker. Görünmüyorsa girişle ilgili günlükleri kontrol edin ve ipuçları verelim.

    Referans için aşağıdaki örneğe bakın:

    UnwantedInteractionBlocker:
      mEnablePalmRejection: true
      isPalmRejectionEnabled (flag value): true
      mPalmRejectors:
        deviceId = 3:
          mDeviceInfo:
            max_x = 
            max_y = 
            x_res = 11.00
            y_res = 11.00
            major_radius_res = 1.00
            minor_radius_res = 1.00
            minor_radius_supported = true
            touch_major_res = 1
            touch_minor_res = 1
          mSlotState:
            mSlotsByPointerId:
    
            mPointerIdsBySlot:
    
          mSuppressedPointerIds: {}
    
  6. Özelliği kalıcı olarak etkinleştirmek için ilgili sysprop komutunu dosyanıza ekleyin: init**rc

    setprop persist.device_config.input_native_boot.palm_rejection_enabled 1
    

Daha fazla bilgi