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
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ış. Bir giriş cihazı tek dokunmalı cihaz veya çok noktalı cihaz olarak sınıflandırıldığından hiçbir zaman.
- 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 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
veyaREL_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
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, MotionEvent
API'sinde olduğu gibi
işaretçi olarak kullanın.
Aşağıdaki araç türleri desteklenir:
BTN_TOOL_FINGER
veMT_TOOL_FINGER
: EşlendiMotionEvent.TOOL_TYPE_FINGER
.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 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, 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ı) 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
veyaMT_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ğerlerABS_MT_POSITION_X
, veABS_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
veyaABS_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
veyaABS_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
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 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
ilePI
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ırBTN_TOOL_*
tarafından bildirilen tür bilgisi. Araç türü bilgisi yoksa araç türü varsayılan olarakMotionEvent.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
. veyaBTN_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
veyaBTN_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 veBTN_TOUCH
öğesinin değeri sıfırsa araç fareyle üzerine geliyordur.
- Araç
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ındanSYN_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.
Dokunmatik cihaz işlemi
Aşağıda, Android'deki dokunmatik cihazın çalışma şekline ilişkin kısa bir özet verilmiştir.
EventHub
,evdev
sürücüsünden ham etkinlikleri okur.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.- 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. 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 durumdaInputDispatcher
uygulamasına bildirim gönderir. dokunuş etkinliği.- 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. - 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
, şunların mevcut olup olmadığını belirlemek içinWindowManagerPolicy
kullanır: ve etkinliklerin gönderilmesi ve cihazı uyandırmalarının gerekip gerekmediği. ArdındanInputDispatcher
, 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
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 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 veyaraw.touchMajor
kullanılamaz.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 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 durumdageometric
kalibrasyonunu kullanır:raw.touchMajor
veyaraw.toolMajor
ekseni kullanılabilir, aksi takdirdenone
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 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 ö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 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'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 sisteminterpolated
kalibrasyonunu kullanır yön ekseni varsa, aksi takdirdenone
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 durumdascaled
kalibrasyonunu kullanır: mesafe ekseni kullanılabilir, aksi takdirdenone
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 zaman0x01
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 veFLAG_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
- 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. - Alanların doğru şekilde ayarlandığını onaylamak için şu komutu çalıştırın:
$ adb shell getevent -li
. - 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
. 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
init**rc
dosya:setprop persist.device_config.input_native_boot.palm_rejection_enabled 1