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
veABS_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
veABS_Y
mutlaklarının varlığını bildirir eksenleri veBTN_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
veyaREL_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
veBTN_SIDE
:MotionEvent.BUTTON_BACK
ile eşlendi. Bu düğmeye basıldığında tuşa basma işlemi de tuş koduyla sentezlenirKeyEvent.KEYCODE_BACK
BTN_FORWARD
veBTN_EXTRA
: EşlendiMotionEvent.BUTTON_FORWARD
. Bu düğmeye basıldığında tuşa basma işlemi de sentezlenirKeyEvent.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
veMT_TOOL_FINGER
:MotionEvent.TOOL_TYPE_FINGER
ile eşlenmiştir.BTN_TOOL_PEN
veMT_TOOL_PEN
: EşlendiMotionEvent.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
veBTN_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, sistemBTN_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
veyaMT_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
veABS_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
veyaABS_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
veyaABS_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
veABS_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 ilePI / 2
radyan arasında değişen bir dik eğim açısına ve-PI
ilePI
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ırsaBTN_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 olarakMotionEvent.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
. veyaBTN_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
veyaBTN_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 veBTN_TOUCH
sıfır değerine sahipse araç fareyle üzerine gelinmiş durumdadır.
- Araç
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ındanSYN_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 işlemi
Aşağıda, Android'deki dokunmatik cihaz işleminin kısa bir özeti verilmiştir.
EventHub
,evdev
sürücüsünden ham etkinlikleri okur.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.- GERİ veya İLERİ düğmesine basıldıysa ya da düğme bırakıldıysa
InputReader
,InputDispatcher
'i önemli etkinlik hakkında bilgilendirir. 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.InputReader
, dokunmanın sınırlarını içerir. Bu durumda, dokunma etkinliği hakkındaInputDispatcher
'ü bilgilendirir.- Dokunma aracı yoksa ancak en az bir fareyle üzerine gelme aracı varsa
InputReader
, fareyle üzerine gelme etkinliği hakkındaInputDispatcher
'u bilgilendirir. - 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ındaInputDispatcher
. InputDispatcher
, etkinliklerin gönderilip gönderilmeyeceğini ve cihazı uyandırıp uyandırmayacağını belirlemek içinWindowManagerPolicy
'ı kullanır. ArdındanInputDispatcher
, 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
veyaABS_MT_POSITION_X
ekseninin değeri.raw.y
ABS_Y
veyaABS_MT_POSITION_Y
ekseninin değeri.raw.pressure
ABS_PRESSURE
veyaABS_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ğilseraw.touchMajor
.raw.toolMajor
ABS_TOOL_WIDTH
veyaABS_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ğilseraw.toolMajor
kullanılabilir.raw.orientation
ABS_MT_ORIENTATION
ekseninin değeri; yoksa 0.raw.distance
ABS_DISTANCE
veyaABS_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
veyaraw.toolMajor
ekseni mevcutsageometric
kalibrasyonunu, aksi takdirdenone
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 durumdaphysical
kalibrasyonunu kullanır: basınç ekseni mevcut, aksi takdirdenone
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 birraw.orientation.min
değerinin ham değeri-PI/2
ile, ham değeri iseraw.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 mevcutsainterpolated
kalibrasyonunu, aksi takdirdenone
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 mevcutsascaled
kalibrasyonunu, aksi takdirdenone
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 zaman0x01
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
veFLAG_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
- 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. - Alanların doğru şekilde ayarlandığını onaylamak için şunları çalıştırın:
$ adb shell getevent -li
- Özelliği çalışma zamanında etkinleştirmek için:
$ adb shell device_config put input_native_boot palm_rejection_enabled 1
system_server
işlemini yeniden başlatın.$ adb shell stop && adb shell start
adb shell dumpsys input
cihazının, avuç içi reddediciler olduğunu gösterdiğini onaylayınUnwantedInteractionBlocker
. 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: {} - Ö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