Dokunmatik cihazlar

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

Dokunmatik ekranlar, şu tür bir ekranla ilişkilendirilmiş dokunmatik cihazlardır: Kullanıcı ekrandaki öğeleri doğrudan değiştiriyor izlenimi yaratıyor.

Dokunmatik yüzeyler bir ekranla ilişkilendirilmemiş dokunmatik cihazlardır. Örneğin, dijitalleştirici 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. teknolojiye bağlı olarak parmaklarınız veya ekran kalemi gibi

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ı

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

  • 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ış. Bir giriş cihazı tek dokunmalı cihaz veya çok noktalı cihaz olarak sınıflandırıldığından hiçbir zaman.
  • 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 bir tuş eşlemesi varsa tuş düzeni yüklü olduğundan emin olun. [Sanal tuş haritası dosyalarına](#virtual-key-map-files) bakın ziyaret ederek bu dosyaların konumu ve biçimi hakkında bilgi edinebilirsiniz.

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

Tüm yerleşik dokunmatik cihazların giriş cihazı yapılandırma dosyaları olmalıdır. Giriş cihazı yapılandırma dosyası yoksa sistem genel amaca uygun bir varsayılan yapılandırma seçtiğinde harici USB veya Bluetooth HID dokunmatik ekranlar gibi dokunmatik çevre birimleri veya dokunmatik yüzeylerde. 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, dokunmatik ekran, dokunmatik alan veya imleç cihazı olarak giriş cihazını kullanın.

  • Dokunmatik ekran cihazları, ekrandaki nesnelerin doğrudan işlenmesi için kullanılır. tıklayın. Kullanıcı doğrudan ekrana dokunduğundan sistem gösteren nesneleri göstermek için çarpıtılır.
  • 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. Ekran kalemleri gibi diğer araçlar ise mutlak konumlar. Görüntüleyin Dolaylı, çok noktalı işaretçi hareketlerle ilgili daha fazla bilgi edinin.

Aşağıdaki kurallar giriş cihazını dokunmatik ekran olarak sınıflandırmak için kullanılır. veya işaretçiyi kullanabilirsiniz.

  • touch.deviceType özelliği ayarlanırsa cihaz türü belirtilen şekilde ayarlanır.
  • Giriş cihazı, INPUT_PROP_DIRECT varlığını bildirirse giriş özelliği aracılığıyla (EVIOCGPROP ioctl üzerinden) ayarlanırsa 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 bulunduğunu bildiriyorsa göreli eksenlerdeyse cihaz türü dokunmatik alan 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 dokunmatik alan, kontrol etmek için fare zaten kontrol ediyordur.
  • Aksi takdirde, cihaz türü işaretçi olarak ayarlanır. Bu varsayılan değer, Başka bir özel amaç tanımlanmamış dokunmatik yüzeyler işaretçiyi kontrol edebilirsiniz.

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 fareye benzer şekilde çalışır Çoğunlukla işaretçi tipi dokunmatik cihazlar veya ekran kalemi.

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, MotionEvent API'sinde olduğu gibi işaretçi olarak kullanın.

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

  • BTN_TOOL_FINGER ve MT_TOOL_FINGER: Eşlendi MotionEvent.TOOL_TYPE_FINGER.
  • 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 veya dokunma araçları

Araçlar, dokunmatik cihazla temas halinde veya kapsama alanında ve üzerinde tıklayın. Tüm dokunmatik cihazlar bir aracın varlığını algılayamaz cihazın üzerinde bekleyin. RF tabanlı ekran kalemi dijitalleştiriciler gibi, cihaz, dijitalleştiricinin sınırlı bir aralığında olduğunu genellikle 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ı da uygulamalara bildirilir. şekillerde kullanabilirsiniz.

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

Fareyle üzerine gelme araçları, MotionEvent.ACTION_HOVER_ENTER, MotionEvent.ACTION_HOVER_MOVE, ve MotionEvent.ACTION_HOVER_EXIT.

Dokunmatik cihaz sürücüsü gereksinimleri

  • 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 eksenleri veya anahtar kodlarını kaydetme cihaz sınıflandırma algoritmasını karıştırabilir veya sistemin yanlış bir şekilde işlemesine algılamasını sağlar. Ö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ı) Bahşiş uygulanan fiziksel baskıyı bildirir sinyal gücünün doğru olabileceğine dikkat edin.
    • 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ı) Aracın eğimini ekranın yüzeyinden bildirir. dokunarak cihazın X ekseni boyunca gösterilmesine izin verin.
    • 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 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.
  • Ç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ın 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ı) Sütunun kesit alanını bildirir uzunluğu veya aracın kendisinin daha uzun Bu ekseni kullanma yoksa aracın boyutlarını bilmiyorsanız.
    • ABS_MT_WIDTH_MINOR: (isteğe bağlı) Daha kısa boyutun uzunluğunu bildirir çok önemli. ABS_MT_WIDTH_MAJOR raporlama yapıyorsa bu eksen kullanılmamalıdır alan ölçümü veya aracın boyutlarının bilinmediği durumlar olabilir.
    • ABS_MT_ORIENTATION: (isteğe bağlı) Aracın yönünü bildirir.
    • ABS_MT_DISTANCE: (isteğe bağlı) Aracın cihazın yüzeyini görüntülemek.
    • ABS_MT_TOOL_TYPE: (isteğe bağlı) araç türü: MT_TOOL_FINGER veya MT_TOOL_PEN.
    • 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". Linux çoklu dokunma protokolü belgelerine bakın inceleyebilirsiniz.
    • 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ımlanmışsa yalnızca çok noktalı eksenler kullanılır ve tek dokunmalı eksenler yoksayılır.
  • ABS_X, ABS_Y, minimum ve maksimum değerler ABS_MT_POSITION_X, ve ABS_MT_POSITION_Y eksen, cihazın etkin alanının sınırlarını tanımlar. farklı yüzeylere sahip. Dokunmatik ekranlarda etkin alan Dokunmatik cihazın ekranı gerçekten kaplayan bölümünü tanımlamaktadır.

    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 dokunmalar uygulamalara iletilmez 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 davranıştır.

    Dokunmatik cihaz, dokunma koordinatlarını hiçbir zaman etkin öğenin sınırlarına alanı. Bir dokunma eylemi etkin alandan çıkarsa bunun, bölgenin dışında olduğu bildirilmelidir. aktif alanı göstermemeli, hiç bildirilmemelidir.

    Ö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 ekranlı raporlar (minX, minY) olmamalıdır. Kullanıcı parmağı, etkin alanın dışına gerçekten dokunduğunda.

    Dokunmatik koordinatları ekran kenarına sabitlemek, yapay bir ekranın kenarını sınırlayan sert bir sınır olmalıdır. Bu sınırlama, sistemin görüntüleme alanının sınırlarına giren veya bu sınırların dışına çıkan hareketleri yumuşak bir şekilde izleme.

  • Aşağıdaki durumlarda ABS_PRESSURE veya ABS_MT_PRESSURE tarafından bildirilen değerler hiçbir değer bildirilmediğinde, araç cihaza dokunduğunda sıfır olmayan bir değer olmalıdır aracın fareyle üzerine geldiğini belirtmek için sıfır veya sıfır olarak ayarlayın.

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

  • ABS_TOOL_WIDTH, ABS_MT_TOUCH_MAJOR, ABS_MT_TOUCH_MINOR, ABS_MT_WIDTH_MAJOR veya Araç, ABS_MT_WIDTH_MINOR değerinin 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, dokunmatik cihaz, parmak dokunmalarının boyutunu ölçebilir. değil ekran kalemi dokunulan kişileri.

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

  • ABS_DISTANCE veya ABS_MT_DISTANCE tarafından bildirilen değerler sıfıra yaklaşır. Mesafe sıfır olmayabilir bağlantı kurulabilir. Raporlanan tam değerler, Mesafe ölçtüğünden emin olun.

    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 yatırma açılarının derece cinsinden belirtildiği varsayılır dik konumdadır. Merkez noktası (tamamen dik) ise her eksen için (max + min) / 2 değerini alır. Merkez noktasından daha küçük değerler yukarı veya sola bir yatırmayı temsil eder; değerler, merkez noktasından daha büyüktür sağa veya aşağı yatırmayı temsil eder.

    InputReader, X ve Y yatırma bileşenlerini dik konuma dönüştürür 0 - PI / 2 radyan arasında bir yatırma açısı ve düzlemsel yön açısı -PI ile PI radyan arasında. Bu temsil sonucunda yön ve yönünün belirlenmesinde kullanılan parmak dokunuşları.

    Eğme ile ilgili bilgilerin raporlanması isteğe bağlıdır ancak ekran kalemi cihazları için önerilir.

  • Bu araç türü ABS_MT_TOOL_TYPE tarafından bildirilirse diğer tüm araçların yerini alır BTN_TOOL_* tarafından bildirilen tür bilgisi. Araç türü bilgisi yoksa araç türü varsayılan olarak MotionEvent.TOOL_TYPE_FINGER

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

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

      Bu koşul, InputReader için en azından ister dokunmadan, ister üstlenmeden en azından araç türünü ifade eder. Bilgi yoksa aracın etkin olmadığı (aralık dışında) varsayılır.

    • "A" çok noktalı protokolü kullanılırken araç her bağlantı noktasında etkindir en son senkronizasyon raporunda görünür. Araç, artık yer almaz.
    • "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 araç öğesinin üzerine gelmediğinden emin olun.
    • Araç etkinse ve sürücü basınç bilgisi veriyorsa ve raporlanan basınç sıfır ise araç fareyle üzerine gelinmektedir.
    • Araç etkinse ve sürücü BTN_TOUCH anahtar kodunu destekliyorsa ve BTN_TOUCH öğesinin değeri sıfırsa araç fareyle üzerine geliyordur.
  • InputReader, "A" çoklu dokunma protokolünü destekler ve "B"yi seçin. Yeni sürücüler 'B'yi kullanmalıdır her ikisi de çalışır.
  • Android 4.0 sürümünden itibaren dokunmatik ekran sürücülerinin değiştirilmesi gerekebilir. yeni bir teknoloji olduğunu fark etti.

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

    • Bir araç devre dışı kaldığında (parmak "yukarı" kalktığında) gösterimi durmalıdır ...gelecekteki çoklu dokunma senkronizasyonu raporlarında yer alacak. Tüm araçlar devre dışı kaldığında (tüm parmaklar yukarı hareket ederse) sürücünün boş bir senkronizasyon raporu paketi göndermesi gerekir. SYN_MT_REPORT ve ardından SYN_REPORT gibi.

      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ü spesifikasyonu ve artık desteklenmiyor.

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

      Android'in önceki sürümleri alınan baskı bilgilerini başlangıç fiyatı: ABS_MT_TOUCH_MAJOR. Eski davranış Linux giriş protokolü spesifikasyonu ve artık desteklenmiyor.

    • Dokunma boyutu bilgileri ABS_MT_TOUCH_MAJOR kullanılarak bildirilmelidir.

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

    ziyaret edin. Dokunmatik cihaz sürücüleri için artık Android'e özel özelleştirmeler gerekmiyor. Android, standart Linux giriş protokolünü kullanarak Daha geniş yelpazede dokunmatik çevre birimleri (ör. harici HID çoklu dokunma) sürücüleri kullanarak bunu mümkün kılmaktır.

Dokunmatik cihaz işlemi

Aşağıda, Android'deki dokunmatik cihazın çalışma şekline ilişkin kısa bir özet verilmiştir.

  1. EventHub, evdev sürücüsünden ham etkinlikleri okur.
  2. InputReader, ham etkinlikleri kullanır ve ile ilgili dahili durumu günceller. her aracın konumu ve diğer özellikleri. Aynı zamanda düğmesi durumlarını kontrol edin.
  3. GERİ veya YÖNLENDİR tuşuna basıldıysa ya da bırakıldıysa: InputReader, InputDispatcher adlı kullanıcıyı ö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 InputDispatcher uygulamasına bildirim gönderir. dokunuş etkinliği.
  6. Dokunmaya yönelik araçlar yoksa ancak fareyle üzerine gelme gibi en az bir araç varsa InputReader, InputDispatcher adlı yeri fareyle üzerine gelme etkinliği hakkında 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, şunların mevcut olup olmadığını belirlemek için WindowManagerPolicy kullanır: ve etkinliklerin gönderilmesi ve cihazı uyandırmalarının gerekip gerekmediği. Ardından InputDispatcher, etkinlikleri uygun uygulamalara yayınlar.

Dokunmatik cihaz yapılandırması

Dokunmatik cihaz davranışı, cihazın eksenlerine, düğmelerine, giriş özelliklerine, giriş cihazı yapılandırmasını, sanal tuş eşlemesini ve tuş düzenini kullanabilirsiniz.

Dosyalarda görünen dosyalar hakkında daha ayrıntılı bilgi için klavye yapılandırmasına katılma:

Ö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 için cihaz sürücülerinin, dokunmaların özelliklerini tanımlamak için kullanır.

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

Sistem, giriş cihazı yapılandırmasında kodlanmış kalibrasyon parametrelerini kullanır dokunarak bildirilen değerlerin kodunu çözmek, dönüştürmek ve normalleştirmek için kullanabilir uygulamaların anlayabileceği daha basit bir standart biçime dönüştürme.

Belgeleme kuralları

Belgeleme amacıyla, belgeleme amacıyla kalibrasyon sürecinde sistem tarafından kullanılan değerler

Ham eksen değerleri

Aşağıdaki ifadeler, bir dokunma ile bildirilen işlenmemiş değerleri gösterir cihaz sürücüsünü EV_ABS etkinliği olarak ayarla.

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 aşağıdaki durumlarda 0 kullanılamaz.
raw.touchMajor
ABS_MT_TOUCH_MAJOR ekseninin değeri; yoksa 0.
raw.touchMinor
ABS_MT_TOUCH_MINOR ekseninin değeri veya raw.touchMajor kullanılamaz.
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 aşağıdaki durumlarda 0 kullanılamaz.
raw.tiltX
ABS_TILT_X ekseninin değeri; yoksa 0.
raw.tiltY
ABS_TILT_Y ekseninin değeri; yoksa 0.

Ham eksen aralıkları

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

raw.*.min
Ham eksenin kapsayıcı 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 açısından doğru olduğu anlamına gelir.
raw.width
Dokunma alanının dahil genişliği (raw.x.range + 1 ile eşdeğerdir).
raw.height
Dokunma alanının toplam yüksekliği (raw.y.range + 1 ile eşdeğerdir).

Çı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 için (ekranla ilişkili olmayan) çıkış genişliği raw.width değerine eşittir ve bu, interpolasyon olmadığını gösterir emin olun.
output.height
Çıkış yüksekliği. Dokunmatik ekranlar (bir ekranla ilişkilendirilmiş) için bu piksel cinsinden görüntü 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şli eşleyici, giriş cihazında birçok yapılandırma özelliğini kullanır kalibrasyon değerlerini belirtin. Aşağıdaki tabloda bazı genel amaçlı yapılandırma özellikleri. Diğer tüm özellikler için açıklama kalibre etmek için kullanıldıkları alanlarla birlikte aşağıda bulabilirsiniz.

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, ilişkilendirilmemiş bir dokunmatik alandır hareketler kullanılarak dolaylı olarak çok noktalı işaretçi hareketleri yapma.

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

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

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

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 bildirilen dokunma konumları bağışıktır Yön değişikliklerini görüntüleyin.

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

Sistem, dahili ve harici dokunmatik ekranlar ile ekranları birbirinden ayırt eder. 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 döndürüldü harici ekranın yönüne göre değiştirirsiniz.

Yön farkındalığı, cihazlardaki dokunmatik ekranların döndürülmesini desteklemek için kullanılır bazı cihazlar var. Örneğin, cihaz saat yönünde 90 derece döndürüldüğünde bu şekilde yeniden konumlandırıldığı için, dokunmaların mutlak konumları Dokunmatik ekranın mutlak koordinat sisteminin sol üst köşesine ekranın döndürülmüş koordinat sisteminde sol üst köşesinde bir dokunma olarak raporlanır. Bu, dokunmaların diğer koordinat sistemiyle aynı 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.

dokunma.hareketmodu

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 alan hareketleri bir sabitleyici ile sunulur hareketin merkezini ve bir dizi dairesel noktayı temsil eden gösteren resim öğeleri için de geçerlidir.

INPUT_PROP_SEMI_MT giriş özelliği olduğunda varsayılan değer pointer olur ayarlanmışsa spots değerini alır.

X ve Y alanları

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

Hesaplama

Hesaplama basittir: dokunmatik sürücüden alınan konum bilgileri çıktı koordinat sistemine doğrusal olarak interpolasyonuyla hesaplanır.

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. Yalnızca temas alanının 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 Dokunmanın veya aracın çapı (genişliği).

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

  • Değer default ise sistem şu durumda geometric kalibrasyonunu kullanır: raw.touchMajor veya raw.toolMajor ekseni kullanılabilir, aksi takdirde none kalibrasyonunu kullanabilirsiniz.

dokunma.boyut.ölçeklendirme

Tanım: touch.size.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.

dokunma.size.bias

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

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

Varsayılan değer 0.0 değeridir.

dokunma.size.isSummed

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

Boyutun, tüm boyutların toplamı olarak raporlanıp raporlanmayacağını belirtir veya her bir kişi için ayrı ayrı bildirilir.

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

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

Varsayılan değer 0 değeridir.

Bazı dokunmatik cihazlar, özellikle "Yarı MT" cihazlar birden fazla kişinin boyutlarını ayrı ayrı inceleyerek beden ölçüsü raporlayın gösteren bir resim öğesi seçin. Bu özellik yalnızca Bu tür cihazlar için 1. Şüphelendiğin bir şey varsa bu değeri 0 olarak ayarla.

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.

dokunma.baskı.kalibrasyon

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

Dokunmatik sürücünün basıncı bildirmek için kullandığı ölçüm türünü belirtir.

  • Değer none ise basınç bilinmediği için tuşuna basarak 0,0'a dokunabilirsiniz.

  • 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 sinyali ölçtüğü varsayılır genlik (temanın boyutu ve uygulanan basınçla ilişkilidir).

  • 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 ö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 eğim alanları

orientation alanı, dokunma ve aracın yönünü açısal ölçüm. 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. Ekran kalemi yön aralığı, tam bir daire aralığında açıklanabilir -PI veya PI.

tilt alanı, aracın eğimini açısal ölçüm olarak tanımlar. 0 değerindeki bir eğim, 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.

dokunma.yüzden.kalibrasyon

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

Yönü 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'de kullanılmaktadır. parçalar. Kod çözüldüğünde, vektör bir yön açısı ve güven verir karar vermelerine yardımcı olur. Güven büyüklüğü, boyut bilgisini ölçeklendirmek için kullanılır. ancak geometrik olmadığı sürece.
  • Değer default ise sistem interpolated kalibrasyonunu kullanır yön ekseni varsa, aksi takdirde none 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 arasındaki mesafeyi açıklar. teşekkür ederiz. 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

Dokunmatik sürücünün mesafeyi bildirmek için kullandığı ö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 ölçek faktörü.

  • Değer default ise sistem şu durumda scaled kalibrasyonunu kullanır: mesafe ekseni kullanılabilir, aksi takdirde none kullanılı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 kalibrasyona bağlıdır parametreleridir.

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ı

Dokunmatik cihazların yapılandırma özellikleri Android Ice Cream Sandwich 4.0. Dokunma için kullanılacak tüm giriş cihazı yapılandırma dosyaları cihazların, yeni yapılandırma özelliklerinin kullanılabilmesi için güncellenmesi gerekir.

Eski dokunmatik cihaz sürücülerinin de güncellendi.

Sanal anahtar eşleme dosyaları

Sanal anahtarları uygulamak için dokunmatik cihazlar kullanılabilir.

Programın özelliklerine bağlı olarak, bunu yapmanın birkaç yolu vardır: Dokunmatik kumanda. Bazı dokunmatik kumandalar, özellikleri otomatik olarak yazılım kayıtlarını ayarlayarak Yumuşak Tuşlar'ı kullanabilirsiniz. Diğer durumlarda ise yazılımda dokunma koordinatlarından anahtar kodlarına

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 bildiriyorsa ardından sanal anahtar eşleme dosyası, /sys/board_properties/virtualkeys.touchyfeely

Sanal anahtar eşleme dosyası, sanal anahtarların koordinatlarını ve Linux anahtar kodlarını açıklar karar verebilirsiniz.

Sanal anahtar eşleme dosyasına ek olarak buna karşılık gelen bir anahtar düzeni olmalıdır Linux anahtar kodlarını Android anahtar kodlarıyla eşlemek için dosya ve anahtar karakter eşleme dosyası klavye cihazının türünü belirtin (genellikle SPECIAL_FUNCTION).

Sözdizimi

Sanal anahtar eşleme dosyası, bir dizi sanal anahtardan oluşan düz bir metin dosyasıdır. yeni satır veya iki nokta ile ayrılmış düzen açıklamalarını tanımlama

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 key code>: Sanal anahtarın Linux anahtar kodu.
  • <centerX>: Sanal anahtar merkezinin X piksel koordinatı.
  • <centerY>: Sanal anahtarın merkezinin 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 sistemine göre 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 480x800 çözünürlüğe sahiptir. Buna göre sanal anahtarlarda <centerY> biraz altında olan 835 koordinatı dokunmatik ekranın görünür alanına yer verin.

İlk anahtarın Linux tarama kodu 158 (KEY_BACK), centerX ise 55, 835 orta Y merkezi, 90 genişliği ve yüksekliği: 55.

Örnek

Sanal anahtar eşleme 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

Tuş düzen dosyası: /system/usr/keylayout/touchyfeely.kl.

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

Anahtar karakter eşleme dosyası: /system/usr/keychars/touchyfeely.kcm.

type SPECIAL_FUNCTION

Dolaylı çok noktalı işaretçi hareketleri

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

  • Tek parmakla dokunma: Tıklama.
  • Tek parmakla hareket etme: İşaretçiyi hareket ettirin.
  • Tek parmakla hareketle ve düğmeye basıldığında: İşaretçiyi sürükleyin.
  • Her iki parmağınızı aynı yöne doğru hareket eden iki parmakla hareket ettirin: İşaretçinin altındaki alanı sürükleyin çok zor olabilir. İş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. Android çerçevesi daha sonra, avuç içilerinizi rahatça hareket ettirin.

Uygulamalara zaten bir işaretçi gönderildiyse sistem:

  • (Başka etkin işaretçiler varsa) ACTION_POINTER_UP ile işaretçiyi iptal eder ve FLAG_CANCELED set.
  • (Tek işaretçi buysa) İş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 reddini etkinleştir

  1. Dokunmatik sürücünüzde input_abs_set_res makrosu aşağıdaki alanlara yönelik çözünürlükleri ayarlamak için (birimler piksel/mm):
    • 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 şu komutu çalıştırın:
        $ adb shell getevent -li
    
    .
  3. Bu özelliği çalışma zamanında etkinleştirmek için şu komutu çalıştırın:
        $ 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 init**rc dosya:

    setprop persist.device_config.input_native_boot.palm_rejection_enabled 1
    

Daha fazla bilgi