Android, ekran kalemi tabanlı sayısallaştırıcı tabletler dahil olmak üzere çeşitli dokunmatik ekranları ve dokunmatik yüzeyleri destekler.
Dokunmatik ekranlar, kullanıcının ekrandaki öğeleri doğrudan manipüle ediyor izlenimine sahip olacağı şekilde bir ekranla ilişkilendirilen dokunmatik cihazlardır.
Dokunmatik yüzeyler, sayısallaştırıcı tablet gibi bir ekranla ilişkili olmayan dokunmatik cihazlardır. Dokunmatik yüzeyler tipik olarak, bir kullanıcı arayüzünün işaretlenmesi veya mutlak dolaylı konumlandırma veya hareket tabanlı kontrolü için kullanılır.
Dokunmatik cihazlarda, işlevleri fare düğmelerine benzer düğmeler olabilir.
Dokunmatik cihazlar, temelde yatan dokunmatik sensör teknolojisine bağlı olarak bazen parmaklar veya bir kalem gibi çeşitli farklı araçlar kullanılarak manipüle edilebilir.
Dokunmatik cihazlar bazen sanal tuşları uygulamak için kullanılır. Örneğin, bazı Android cihazlarda, dokunmatik ekran sensörü alanı ekranın kenarının ötesine uzanır ve dokunmaya duyarlı tuş takımının bir parçası olarak çift amaca hizmet eder.
Çok çeşitli dokunmatik cihazlar nedeniyle Android, her bir cihazın özelliklerini ve istenen davranışını açıklamak için çok sayıda yapılandırma özelliğine güvenir.
Cihaz Sınıflandırmasına dokunun
Aşağıdaki koşulların her ikisi de geçerliyse, bir giriş cihazı çoklu dokunmatik cihaz olarak sınıflandırılır:
Giriş cihazı,
ABS_MT_POSITION_X
veABS_MT_POSITION_Y
mutlak eksenlerin varlığını bildirir.Giriş cihazının oyun kumandası düğmesi yoktur. Bu durum, MT eksenlerininkilerle örtüşen kodlarla eksenleri rapor eden belirli oyun kumandalarındaki belirsizliği giderir.
Aşağıdaki koşulların her ikisi de geçerliyse, bir giriş cihazı tek dokunuşlu cihaz olarak sınıflandırılır:
Giriş cihazı, çoklu dokunmatik cihaz olarak sınıflandırılmamıştır. Bir giriş cihazı ya tek dokunuşlu aygıt ya da çoklu dokunmalı aygıt olarak sınıflandırılır, hiçbir zaman ikisi birden değildir.
Giriş cihazı
ABS_X
veABS_Y
mutlak eksenlerinin varlığını veBTN_TOUCH
anahtar kodunun varlığınıBTN_TOUCH
.
Bir giriş cihazı bir dokunmatik cihaz olarak sınıflandırıldığında, sanal tuşların varlığı, cihaz için sanal anahtar eşleme dosyasını yüklemeye çalışılarak belirlenir. Bir sanal anahtar haritası mevcutsa, cihaz için anahtar düzen dosyası da yüklenir.
Sanal anahtar eşleme dosyalarının konumu ve biçimi hakkında aşağıdaki bölüme bakın.
Ardından, sistem dokunmatik cihaz için giriş cihazı yapılandırma dosyasını yükler.
Tüm yerleşik dokunmatik cihazlar, giriş cihazı yapılandırma dosyalarına sahip olmalıdır. Herhangi bir giriş cihazı yapılandırma dosyası yoksa, sistem, harici USB veya Bluetooth HID dokunmatik ekranlar veya dokunmatik yüzeyler gibi tipik genel amaçlı dokunmatik çevre birimleri için uygun bir varsayılan yapılandırma seçecektir. Bu varsayılanlar yerleşik dokunmatik ekranlar için tasarlanmamıştır ve büyük olasılıkla yanlış davranışa neden olacaktır.
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ıracaktır.
Ekrandaki nesnelerin doğrudan manipülasyonu için bir dokunmatik ekran cihazı kullanılır. Kullanıcı doğrudan ekrana dokunduğundan, sistem manipüle edilen nesneleri belirtmek için herhangi bir ek olanak gerektirmez.
Belirli bir sensör alanına dokunmalar hakkında bir uygulamaya mutlak konumlandırma bilgisi sağlamak için bir dokunmatik yüzey cihazı kullanılır. Sayısallaştırıcı tabletler için faydalı olabilir.
Bir imleç kullanarak ekrandaki nesnelerin dolaylı olarak manipüle edilmesi için bir işaret cihazı kullanılır. Parmaklar, çoklu dokunma işaretçisi hareketleri olarak yorumlanır. Stiluslar gibi diğer araçlar mutlak konumlar kullanılarak yorumlanır.
Daha fazla bilgi için Dolaylı Çoklu Dokunma İşaretçisi Hareketleri konusuna bakın.
Giriş cihazını dokunmatik ekran , dokunmatik yüzey veya işaretçi cihazı olarak sınıflandırmak için aşağıdaki kurallar kullanılır.
touch.deviceType
özelliği ayarlanmışsa, cihaz türü belirtildiği gibi ayarlanacaktır.Giriş cihazı
INPUT_PROP_DIRECT
giriş özelliğinin varlığını bildirirse (EVIOCGPROP
ioctl aracılığıyla), cihaz tipi dokunmatik ekrana ayarlanacaktır. Bu koşul, doğrudan girişli dokunmatik cihazların yine bağlı olan bir ekrana bağlı olduğunu varsayar.Giriş cihazı
INPUT_PROP_POINTER
giriş özelliğinin varlığını bildirirse (EVIOCGPROP
ioctl aracılığıyla), o zaman cihaz tipi işaretçiye ayarlanacaktır.Giriş cihazı,
REL_X
veyaREL_Y
göreceli eksenlerin varlığını bildirirse, cihaz türü dokunmatik yüzeye ayarlanacaktır. Bu durum, hem fare hem de dokunmatik yüzeyden oluşan giriş aygıtları için bir belirsizliği giderir. Bu durumda, fare zaten kontrol ettiği için dokunmatik yüzey işaretçiyi kontrol etmek için kullanılmayacaktır.Aksi takdirde, cihaz tipi işaretçi olarak ayarlanacaktır. Bu varsayılan, başka herhangi bir özel amaç olarak belirtilmemiş dokunmatik yüzeylerin imleci kontrol etmeye hizmet etmesini sağlar.
Düğmeler
Düğmeler, uygulamalar tarafından ek işlevler gerçekleştirmek için kullanılabilen isteğe bağlı kontrollerdir. Dokunmatik cihazlardaki düğmeler, fare düğmelerine benzer şekilde davranır ve çoğunlukla işaretçi tipi dokunmatik cihazlarda veya bir kalemle kullanılır.
Aşağıdaki düğmeler desteklenmektedir:
BTN_LEFT
:MotionEvent.BUTTON_PRIMARY
eşlendi.BTN_RIGHT
:MotionEvent.BUTTON_SECONDARY
eşlendi.BTN_MIDDLE
:MotionEvent.BUTTON_MIDDLE
eşlendi.BTN_BACK
veBTN_SIDE
:MotionEvent.BUTTON_BACK
eşlendi. Bu düğmeye basmak aynı zamandaKeyEvent.KEYCODE_BACK
anahtar koduyla bir tuşaKeyEvent.KEYCODE_BACK
sentezler.BTN_FORWARD
veBTN_EXTRA
:MotionEvent.BUTTON_FORWARD
eşlendi. Bu düğmeye basmak aynı zamandaKeyEvent.KEYCODE_FORWARD
anahtar koduyla bir tuşaKeyEvent.KEYCODE_FORWARD
sentezler.BTN_STYLUS
:MotionEvent.BUTTON_SECONDARY
eşlendi.BTN_STYLUS2
:MotionEvent.BUTTON_TERTIARY
eşlendi.
Araçlar ve Araç Türleri
Araç , dokunmatik cihazla etkileşim için kullanılan bir parmak, ekran kalemi veya başka bir cihazdır. Bazı dokunmatik cihazlar, farklı araç türlerini ayırt edebilir.
Android'in başka yerlerinde, MotionEvent
API'sinde olduğu gibi, bir araca genellikle işaretçi adı verilir .
Aşağıdaki araç türleri desteklenmektedir:
BTN_TOOL_FINGER
veMT_TOOL_FINGER
:MotionEvent.TOOL_TYPE_FINGER
eşlendi.BTN_TOOL_PEN
veMT_TOOL_PEN
:MotionEvent.TOOL_TYPE_STYLUS
eşlendi.BTN_TOOL_RUBBER
:MotionEvent.TOOL_TYPE_ERASER
eşlendi.BTN_TOOL_BRUSH
:MotionEvent.TOOL_TYPE_STYLUS
eşlendi.BTN_TOOL_PENCIL
:MotionEvent.TOOL_TYPE_STYLUS
eşlendi.BTN_TOOL_AIRBRUSH
:MotionEvent.TOOL_TYPE_STYLUS
eşlendi.BTN_TOOL_MOUSE
:MotionEvent.TOOL_TYPE_MOUSE
eşlendi.BTN_TOOL_LENS
:MotionEvent.TOOL_TYPE_MOUSE
eşlendi.BTN_TOOL_DOUBLETAP
,BTN_TOOL_TRIPLETAP
veBTN_TOOL_QUADTAP
:MotionEvent.TOOL_TYPE_FINGER
eşlendi.
Gezinme ve Dokunma Araçları
Araçlar, dokunmatik cihazla temas halinde olabilir veya kapsama alanı içinde ve üzerinde durabilir. Tüm dokunmatik cihazlar, dokunmatik cihazın üzerinde gezinen bir aracın varlığını algılayamaz. RF tabanlı dijital kalem sayısallaştırıcılar gibi bunu yapanlar, genellikle aracın sayısallaştırıcının sınırlı bir aralığında olduğunu algılayabilir.
InputReader
bileşeni, dokunma araçlarını gezinme araçlarından ayırmaya özen gösterir. Aynı şekilde, dokunma araçları ve gezinme araçları da uygulamalara farklı şekillerde bildirilir.
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 olayları olarak rapor edilir.
Gezinme araçları, MotionEvent.ACTION_HOVER_ENTER
, MotionEvent.ACTION_HOVER_MOVE
ve MotionEvent.ACTION_HOVER_EXIT
kullanılarak genel hareket olayları olarak uygulamalara bildirilir.
Aygıt Sürücüsü Gereksinimlerine dokunun
Dokunmatik aygıt sürücüleri, gerçekten destekledikleri eksenler ve düğmeler için yalnızca eksenleri ve anahtar kodlarını kaydetmelidir. Fazla eksenlerin veya anahtar kodlarının kaydedilmesi, cihaz sınıflandırma algoritmasını karıştırabilir veya sistemin, cihazın yeteneklerini yanlış bir şekilde algılamasına neden olabilir.
Örneğin, cihaz
BTN_TOUCH
anahtar kodunu bildirirse, sistemBTN_TOUCH
her zaman aracın gerçekten ekrana dokunup dokunmadığını belirtmek için kullanılacağını varsayacaktır. Bu nedenle,BTN_TOUCH
, aletin yalnızca aralıkta ve havada olduğunu belirtmek için kullanılmamalıdır.Tek dokunuşlu cihazlar aşağıdaki Linux giriş olaylarını kullanır:
ABS_X
: (GEREKLİ)ABS_X
X koordinatınıABS_X
.ABS_Y
: (GEREKLİ)ABS_Y
Y koordinatınıABS_Y
.ABS_PRESSURE
: (isteğe bağlı) Aletin ucuna uygulanan fiziksel basıncı veya dokunma temasının sinyal gücünü bildirir.ABS_TOOL_WIDTH
: (isteğe bağlı) Dokunmatik kontağın veya aletin kendisinin enine kesit alanını veya genişliğiniABS_TOOL_WIDTH
.ABS_DISTANCE
: (isteğe bağlı) Aletin, dokunmatik cihazın yüzeyine olan mesafesiniABS_DISTANCE
.ABS_TILT_X
: (isteğe bağlı) Dokunmatik cihazın yüzeyinden X ekseni boyunca aletin eğiminiABS_TILT_X
.ABS_TILT_Y
: (isteğe bağlı) Y ekseni boyunca dokunmatik cihazın yüzeyinden takımın eğiminiABS_TILT_Y
.BTN_TOUCH
: (GEREKLİ) Aletin cihaza temas edip etmediğini gösterir.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ı) Raporları aracı tipini .
Çoklu dokunmatik cihazlar aşağıdaki Linux giriş olaylarını kullanır:
ABS_MT_POSITION_X
: (GEREKLİ)ABS_MT_POSITION_X
X koordinatınıABS_MT_POSITION_X
.ABS_MT_POSITION_Y
: (GEREKLİ)ABS_MT_POSITION_Y
Y koordinatınıABS_MT_POSITION_Y
.ABS_MT_PRESSURE
: (isteğe bağlı) Aletin ucuna uygulanan fiziksel basıncı veya dokunmatik temasın sinyal gücünü bildirir.ABS_MT_TOUCH_MAJOR
: (isteğe bağlı) Dokunmatik temasın enine kesit alanını veya dokunmatik temasın daha uzun boyutunun uzunluğunu raporlar.ABS_MT_TOUCH_MINOR
: (isteğe bağlı) Dokunmatik kontağın daha kısa boyutunun uzunluğunuABS_MT_TOUCH_MINOR
.ABS_MT_TOUCH_MAJOR
bir alan ölçümü bildiriyorsa bu eksen kullanılmamalıdır.ABS_MT_WIDTH_MAJOR
: (isteğe bağlı) Aletin kendisinin enine kesit alanını veya aletin kendisinin daha uzun boyutunun uzunluğunuABS_MT_WIDTH_MAJOR
. Takımın boyutları bilinmiyorsa bu eksen kullanılmamalıdır.ABS_MT_WIDTH_MINOR
: (isteğe bağlı) Aletin kendisinin daha kısa boyutunun uzunluğunuABS_MT_WIDTH_MINOR
.ABS_MT_WIDTH_MAJOR
bir alan ölçümü bildiriyorsa veya aletin boyutları bilinmiyorsa bu eksen kullanılmamalıdır.ABS_MT_ORIENTATION
: (isteğe bağlı) Aracın yönünüABS_MT_ORIENTATION
.ABS_MT_DISTANCE
: (isteğe bağlı) Aletin, dokunmatik cihazın yüzeyine olan mesafesiniABS_MT_DISTANCE
.ABS_MT_TOOL_TYPE
: (isteğe bağlı) Takım türünüMT_TOOL_FINGER
veyaMT_TOOL_PEN
olarakMT_TOOL_PEN
.ABS_MT_TRACKING_ID
: (isteğe bağlı) Aracın izleme kimliğiniABS_MT_TRACKING_ID
. İzleme kimliği, birden çok araç etkinken her bir aracı bağımsız olarak tanımlamak ve izlemek için kullanılan, negatif olmayan, rastgele bir tam sayıdır. Örneğin, birden fazla parmak cihaza dokunduğunda, her parmağa, parmak temas halinde kaldığı sürece kullanılan ayrı bir izleme kimliği atanmalıdır. Takip kimlikleri, ilişkili araçları menzil dışına çıktığında yeniden kullanılabilir.ABS_MT_SLOT
: (isteğe bağlı) Linux çoklu dokunma protokolü 'B' kullanılırken aracın yuva kimliğini raporlar. Daha fazla ayrıntı için Linux çoklu dokunma protokolü belgelerine bakın.BTN_TOUCH
: (GEREKLİ) Aletin cihaza temas edip etmediğini gösterir.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ı) Raporları aracı tipini .
Hem tek dokunuş hem de çoklu dokunma protokolü için eksenler tanımlanırsa, yalnızca çoklu dokunma eksenleri kullanılır ve tek dokunuşlu eksenler göz ardı edilir.
ABS_X
,ABS_Y
,ABS_MT_POSITION_X
veABS_MT_POSITION_Y
eksenlerinin minimum ve maksimum değerleri, cihaza özel yüzey birimlerinde cihazın aktif alanının sınırlarını tanımlar. Bir dokunmatik ekran olması durumunda, aktif alan dokunmatik cihazın gerçekte ekranı kaplayan kısmını tanımlar.Bir dokunmatik ekran için, sistem aşağıdaki hesaplamaya göre ekran piksellerinde dokunma konumlarını elde etmek için yüzey birimlerinde bildirilen dokunma konumlarını otomatik olarak enterpolasyonlar:
displayX = (x - minX) * displayWidth / (maxX - minX + 1) displayY = (y - minY) * displayHeight / (maxY - minY + 1)
Bir dokunmatik ekran, rapor edilen aktif alanın dışındaki dokunuşları rapor edebilir.
Aktif alanın dışında başlatılan dokunuşlar uygulamalara teslim edilmez ancak sanal tuşlar için kullanılabilir.
Aktif alan içerisinde başlatılan veya görüntüleme alanına giren ve çıkan dokunuşlar uygulamalara iletilir. Sonuç olarak, bir dokunma bir uygulamanın sınırları içinde başlarsa ve daha sonra aktif alanın dışına çıkarsa, uygulama, negatif olan veya ekranın sınırlarının ötesinde olan ekran koordinatlarına sahip dokunma olaylarını alabilir. Bu beklenen bir davranıştır.
Dokunmatik bir cihaz, dokunma koordinatlarını hiçbir zaman etkin alanın sınırlarına kenetlememelidir. Bir dokunuş aktif alandan çıkarsa, aktif alanın dışında olduğu bildirilmeli veya hiç rapor edilmemelidir.
Örneğin, kullanıcının parmağı dokunmatik ekranın sol üst köşesine yakın bir yere dokunuyorsa, (minX, minY) koordinatını bildirebilir. Parmak aktif alanın dışına çıkmaya devam ederse, dokunmatik ekran ya minX ve minY'den küçük (minX - 2, minY - 3) gibi bileşenlerle koordinatları rapor etmeye başlamalı ya da dokunmayı tamamen bildirmeyi bırakmalıdır. Kullanıcının parmağı aktif alanın gerçekten dokunaklı dışında başka deyişle, dokunmatik ekran (Minx, MINY) bildirdiği edilmemelidir.
Dokunma koordinatlarının ekran kenarına kenetlenmesi, ekranın kenarı etrafında yapay bir sert sınır oluşturur ve sistemin, ekran alanının sınırlarına giren veya çıkan hareketleri sorunsuz bir şekilde izlemesini engeller.
ABS_PRESSURE
veyaABS_MT_PRESSURE
tarafından bildirilen değerler, eğer raporABS_MT_PRESSURE
, takım cihaza dokunduğunda sıfırdan farklı olmalıdır ve aletin havada durduğunu belirtmek için sıfır olmalıdır.Basınç bilgisinin bildirilmesi isteğe bağlıdır ancak şiddetle tavsiye edilir. 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
veyaABS_MT_WIDTH_MINOR
tarafından bildirilen değerler, araç cihaza dokunduğunda sıfırdanABS_MT_WIDTH_MINOR
olmalı ve aksi takdirde sıfır olmalıdır, ancak bu gerekli değildir. Örneğin, dokunmatik cihaz, parmakla dokunma temaslarının boyutunu ölçebilir, ancak kalemle dokunma temaslarını ölçemez.Raporlama boyutu bilgisi 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, alet cihaza dokunduğunda sıfıra yaklaşmalıdır. Alet doğrudan temas halinde olsa bile mesafe sıfırdan farklı kalabilir. Bildirilen kesin değerler, donanımın mesafeyi ölçme şekline bağlıdır.Mesafe bilgisinin bildirilmesi isteğe bağlıdır, ancak kalem cihazları için önerilir.
Takım cihaza dik olduğunda
ABS_TILT_X
veABS_TILT_Y
tarafından bildirilen değerler sıfır olmalıdır. Sıfır olmayan bir eğim, aletin bir eğimde tutulduğunun bir göstergesi olarak alınır.X ve Y eksenleri boyunca eğim açılarının, dikeyden derece cinsinden belirtileceği varsayılır. Merkez noktası (tamamen dik), her eksen için
(max + min) / 2
ile verilir. Merkez noktasından daha küçük değerler yukarı veya sola eğimi, merkez noktasından daha büyük değerler aşağı veya sağa doğru eğimi temsil eder.InputReader
, X ve Y eğim bileşenlerini 0 ilaPI / 2
radyan arasında değişen dikey bir eğim açısına ve-PI
ilaPI
radyan arasında değişen düzlemsel bir yönelim açısına dönüştürür. Bu temsil, parmak dokunuşlarını tarif etmek için kullanılanla uyumlu bir yönelim açıklaması ile sonuçlanır.Eğim bilgilerinin bildirilmesi isteğe bağlıdır ancak dijital kalem aygıtları için önerilir.
Takım tipi
ABS_MT_TOOL_TYPE
tarafından raporABS_MT_TOOL_TYPE
,BTN_TOOL_*
tarafından bildirilen tüm takım tipi bilgilerinin yeriniBTN_TOOL_*
. Hiçbir takım tipi bilgisi mevcut değilse, araç tipi varsayılan olarakMotionEvent.TOOL_TYPE_FINGER
.Bir aracın aktif olduğu aşağıdaki koşullara göre belirlenir:
Tek dokunuş protokolünü kullanırken,
BTN_TOUCH
veyaBTN_TOOL_*
1 ise araç etkindir.Bu koşul,
InputReader
, ister temas ediyor olsun, isterse en azından araç türü olsun, aracın doğası hakkında en azından bazı bilgilere sahip olması gerektiği anlamına gelir. Hiçbir bilgi mevcut değilse, aracın devre dışı olduğu varsayılır (aralık dışı).Çoklu dokunma protokolü 'A' kullanılırken, araç en son senkronizasyon raporunda göründüğünde etkindir. Araç, senkronizasyon raporlarında görünmeyi bıraktığında, varlığı sona erer.
Çoklu dokunma protokolü 'B'yi kullanırken, araç aktif bir yuvaya sahip olduğu sürece etkindir. Yuva ortadan kalktığında, alet varlığını yitirir.
Bir aracın, aşağıdaki koşullara göre gezineceği belirlenir:
Araç
BTN_TOOL_MOUSE
veyaBTN_TOOL_LENS
ise, aşağıdaki koşullardan herhangi biri doğru olsa bile araç havadaBTN_TOOL_LENS
.Takım aktifse ve sürücü basınç bilgisini rapor ederse ve bildirilen basınç sıfırsa, o zaman araç havada duruyordur.
Aracının etkin ve sürücü destekliyorsa
BTN_TOUCH
anahtar kodu veBTN_TOUCH
sıfır arasında bir değere sahiptir, daha sonra aracı seyretmektedir.
InputReader
hem çoklu dokunma protokolü "A" hem de "B" yi destekler. Yeni sürücüler 'B' protokolünü kullanmalıdır, ancak her ikisi de çalışacaktır.Android Ice Cream Sandwich 4.0'dan itibaren, Linux giriş protokolü spesifikasyonuna uymak için dokunmatik ekran sürücülerinin değiştirilmesi gerekebilir.
Aşağıdaki değişiklikler gerekli olabilir:
Bir araç devre dışı kaldığında (parmak "yukarı" kalktığında), sonraki çoklu dokunma senkronizasyon raporlarında görünmeyi durdurmalıdır. Tüm araçlar (bütün parmaklar "yukarı" gidin) inaktif hale geldiğinde, sürücü gibi boş bir senkronizasyon raporu paketi, göndermelidir
SYN_MT_REPORT
izlediSYN_REPORT
.Android'in önceki sürümleri, 0 basınç değeri göndererek "yukarı" olayların raporlanmasını bekliyordu. Eski davranış, Linux giriş protokolü belirtimiyle uyumsuzdu ve artık desteklenmiyor.
Fiziksel basınç veya sinyal gücü bilgisi
ABS_MT_PRESSURE
kullanılarakABS_MT_PRESSURE
.Android'in önceki sürümleri basınç bilgilerini
ABS_MT_TOUCH_MAJOR
. Eski davranış, Linux giriş protokolü belirtimiyle uyumsuzdu ve artık desteklenmiyor.Dokunma boyutu bilgileri
ABS_MT_TOUCH_MAJOR
kullanılarakABS_MT_TOUCH_MAJOR
.Android'in önceki sürümleri, boyut bilgilerini
ABS_MT_TOOL_MAJOR
. Eski davranış, Linux giriş protokolü belirtimiyle uyumsuzdu ve artık desteklenmiyor.
Dokunmatik cihaz sürücülerinin artık Android'e özgü özelleştirmelere ihtiyacı yoktur. Android, standart Linux giriş protokolüne güvenerek, değiştirilmemiş sürücüleri kullanarak harici HID çoklu dokunmatik dokunmatik ekranlar gibi çok çeşitli dokunmatik çevre birimlerini destekleyebilir.
Cihaz Çalışmasına dokunun
Aşağıda, Android'de dokunmatik cihaz işleminin kısa bir özeti verilmiştir.
EventHub
,evdev
sürücüsünden ham olayları okur.InputReader
, ham olayları kullanır ve her bir aracın konumu ve diğer özellikleri hakkındaki dahili durumu günceller. Ayrıca düğme durumlarını da izler.GERİ veya İLERİ düğmelerine basılırsa veya bırakılırsa,
InputReader
InputDispatcher
anahtar olay hakkında bilgilendirir.InputReader
, sanal bir tuşaInputReader
belirler. Eğer öyleyse,InputDispatcher
anahtar olay hakkında bilgilendirir.InputReader
, dokunmanın ekranın sınırları içinde başlatılıp başlatılmadığını belirler. Eğer öyleyse,InputDispatcher
dokunma olayını bildirir.InputReader
aracı yoksa ancak en az bir gezinme aracı varsa,InputReader
,InputDispatcher
üzerine gelme olayı hakkındaInputReader
bilgilendirir.Dokunmatik cihaz tipi işaretçi ise,
InputReader
işaretçi hareketi algılaması gerçekleştirir, işaretçiyi hareket ettirir ve uygun şekilde noktalar ve işaretçi olayı hakkındaInputDispatcher
bilgilendirir.InputDispatcher
, olayların gönderilip gönderilmeyeceğini ve cihazı uyandırıp uyandırmayacağını belirlemek içinWindowManagerPolicy
kullanır. Ardından,InputDispatcher
olayları uygun uygulamalara iletir.
Cihaz Yapılandırması'na dokunun
Dokunmatik cihaz davranışı, cihazın eksenleri, düğmeleri, giriş özellikleri, giriş cihazı yapılandırması, sanal tuş haritası ve tuş düzeni tarafından belirlenir.
Klavye yapılandırmasına katılan dosyalar hakkında daha fazla ayrıntı için aşağıdaki bölümlere bakın:
Özellikleri
Sistem, dokunmatik aygıt davranışını yapılandırmak ve kalibre etmek için birçok giriş aygıtı yapılandırma özelliğine güvenir.
Bunun bir nedeni, dokunmatik aygıtlar için aygıt sürücülerinin genellikle aygıta özgü birimleri kullanarak dokunmaların özelliklerini rapor etmesidir.
Örneğin, birçok dokunmatik cihaz, dokunma ile tetiklenen toplam sensör düğüm sayısı gibi dahili cihaza özgü bir ölçek kullanarak dokunma temas alanını ölçer. Bu ham boyut değeri, dokunmatik cihaz sensör düğümlerinin fiziksel boyutu ve diğer özellikleri hakkında bilgi sahibi olmaları gerekeceğinden uygulamalar için anlamlı olmayacaktır.
Sistem, dokunmatik cihaz tarafından bildirilen değerlerin kodunu çözmek, dönüştürmek ve uygulamaların anlayabileceği daha basit bir standart gösterime normalleştirmek için giriş cihazı konfigürasyon dosyalarında kodlanmış kalibrasyon parametrelerini kullanır.
Dokümantasyon Kuralları
Belgeleme amacıyla, kalibrasyon işlemi sırasında sistem tarafından kullanılan değerleri açıklamak için aşağıdaki kuralları kullanacağız.
Ham Eksen Değerleri
Aşağıdaki ifadeler, dokunmatik aygıt sürücüsü tarafından EV_ABS
olayları olarak rapor edilen 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 veya mevcut değilse 0. -
raw.touchMajor
-
ABS_MT_TOUCH_MAJOR
ekseninin değeri veya mevcut değilse 0. -
raw.touchMinor
-
ABS_MT_TOUCH_MINOR
ekseninin değeri veyaraw.touchMajor
değilseraw.touchMajor
. -
raw.toolMajor
-
ABS_TOOL_WIDTH
veyaABS_MT_WIDTH_MAJOR
ekseninin değeri veya mevcut değilse 0. -
raw.toolMinor
-
ABS_MT_WIDTH_MINOR
ekseninin değeri veyaraw.toolMajor
değilseraw.toolMajor
. -
raw.orientation
-
ABS_MT_ORIENTATION
ekseninin değeri veya mevcut değilse 0. -
raw.distance
-
ABS_DISTANCE
veyaABS_MT_DISTANCE
ekseninin değeri veya 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 veya mevcut değilse 0.
Ham Eksen Aralıkları
Aşağıdaki ifadeler, ham değerlerin sınırlarını belirtir. Her eksen için EVIOCGABS
ioctl çağrılarak elde edilirler.
-
raw.*.min
- Ham eksenin kapsayıcı minimum değeri.
-
raw.*.max
- Ham eksenin kapsayıcı maksimum değeri.
-
raw.*.range
-
raw.*.max - raw.*.min
. -
raw.*.fuzz
- Ham eksenin doğruluğu. Örneğin. fuzz = 1, değerlerin +/- 1 birime kadar doğru olduğunu belirtir.
-
raw.width
- Dokunma alanının kapsayıcı genişliği,
raw.x.range + 1
eşdeğerdir. -
raw.height
- Dokunma alanının kapsayıcı yüksekliği,
raw.y.range + 1
eşdeğerdir.
Çıkış Aralıkları
Aşağıdaki ifadeler çıktı koordinat sisteminin özelliklerini belirtir. Sistem, dokunma konumu bilgilerini dokunmatik cihaz tarafından kullanılan yüzey birimlerinden ekran pikselleri gibi uygulamalara rapor edilecek çıktı birimlerine çevirmek için doğrusal enterpolasyon kullanır.
-
output.width
- Çıktı genişliği. Dokunmatik ekranlar için (bir ekranla ilişkili) bu, piksel cinsinden ekran genişliğidir. Dokunmatik yüzeyler için (bir ekranla ilişkili olmayan), çıktı genişliği
raw.width
genişliğe eşittir ve bu, enterpolasyon yapılmayacağını belirtir. -
output.height
- Çıkış yüksekliği. Dokunmatik ekranlar için (bir ekranla ilişkili) bu, piksel cinsinden ekran yüksekliğidir. Dokunmatik yüzeyler için (bir ekranla ilişkili olmayan), çıktı yüksekliği
raw.height
yüksekliğe eşittir ve enterpolasyon yapılmayacağını belirtir. -
output.diag
- Çıktı koordinat sisteminin köşegen uzunluğu,
sqrt(output.width ^2 + output.height ^2)
eşdeğerdirsqrt(output.width ^2 + output.height ^2)
.
Temel yapılandırma
Dokunma girdisi eşleştiricisi, kalibrasyon değerlerini belirtmek için giriş cihazı yapılandırma dosyasındaki birçok yapılandırma özelliğini kullanır. Aşağıdaki tablo bazı genel amaçlı yapılandırma özelliklerini açıklamaktadır. Diğer tüm özellikler, kalibre etmek için kullandıkları alanlarla birlikte aşağıdaki bölümlerde açıklanmaktadır.
touch.deviceType
Tanım: touch.deviceType
= touchScreen
| touchPad
| pointer
| default
Dokunmatik cihaz tipini belirtir.
Değeri ise
touchScreen
, dokunmatik cihaz bir ekran ile ilişkili bir dokunmatik ekranı.Değer dokunmatik yüzey ise, dokunmatik cihaz bir ekranla ilişkili olmayan bir dokunmatik
touchPad
.Değer
pointer
ise, dokunmatik aygıt bir ekranla ilişkili olmayan bir dokunmatik yüzeydir ve hareketleri dolaylı çoklu dokunma işaretçisi 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 tipinin dokunmatik cihazın davranışını nasıl etkilediği hakkında daha fazla ayrıntı için Sınıflandırma bölümüne bakın.
Honeycomb'dan önce, tüm dokunmatik cihazların dokunmatik ekranlar olduğu varsayılıyordu.
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, ekran yönü her değiştiğinde dokunmatik cihaz tarafından bildirilen dokunma konumları döndürülür.Değer
0
ise, dokunmatik cihaz tarafından bildirilen dokunma pozisyonları yön değişikliklerini göstermeye karşı bağışıktır.
Cihaz bir dokunmatik ekran ise varsayılan değer 1
, aksi takdirde 0
.
Sistem, dahili ve harici dokunmatik ekranlar ve ekranlar arasında ayrım yapar. Yöne duyarlı bir dahili dokunmatik ekran, dahili ekranın yönüne göre döndürülür. Yöne duyarlı bir harici dokunmatik ekran, harici ekranın yönüne göre döndürülür.
Yön farkındalığı, Nexus One gibi cihazlarda dokunmatik ekranların dönüşünü desteklemek için kullanılır. Örneğin, cihaz doğal yönünden saat yönünde 90 derece döndürüldüğünde, dokunmatik ekranın mutlak koordinat sisteminin sol üst köşesindeki bir dokunuş, sol üstte bir dokunuş olarak bildirilecek şekilde dokunmaların mutlak konumları yeniden eşlenir ekranın döndürülmüş koordinat sisteminin köşesi. Bu, uygulamaların görsel unsurlarını çizmek için kullandıkları aynı koordinat sistemi ile dokunmaların raporlanması için yapılır.
Honeycomb'dan önce, tüm dokunmatik cihazların yönelim farkında olduğu varsayılıyordu.
touch.gestureMode
Tanım: touch.gestureMode
= pointer
| spots
| default
İşaretçi hareketleri için sunum modunu belirtir. Bu konfigürasyon özelliği, yalnızca dokunmatik cihaz tip işaretçi olduğunda geçerlidir .
Değer
pointer
ise, dokunmatik yüzey hareketleri fare işaretçisine benzer bir imleç aracılığıyla sunulur.Değer
spots
ise dokunmatik yüzey hareketleri, hareketin merkezini temsil eden bir çapa ve tek tek parmakların konumunu temsil eden bir dizi dairesel nokta ile sunulur.
INPUT_PROP_SEMI_MT
girdi özelliği ayarlandığında varsayılan değer pointer
veya aksi takdirde spots
INPUT_PROP_SEMI_MT
.
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 alınan konumsal bilgiler doğrusal olarak çıktı koordinat sistemine enterpolasyonludur.
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
, Size
Alanları
TouchMajor
ve TouchMinor
alanları, çıkış birimlerindeki (pikseller) temas alanının yaklaşık boyutlarını tanımlar.
ToolMajor
ve ToolMinor
alanları, aracın kendisinin yaklaşık boyutlarını çıktı birimlerinde (piksel) tanımlar.
Size
alanı, dokunmatik cihazın algılayabileceği olası en büyük dokunmaya göre normalleştirilmiş dokunma boyutunu tanımlar. Olası en küçük normalleştirilmiş boyut 0.0'dır (temas yok veya ölçülemez) ve olası en büyük normalleştirilmiş boyut 1.0'dır (sensör alanı doygun).
Hem yaklaşık uzunluk hem de genişlik ölçülebildiğinde, TouchMajor
alanı daha uzun boyutu belirtir ve TouchMinor
alanı temas alanının daha kısa boyutunu belirtir. Temas alanının yalnızca yaklaşık çapı ölçülebildiğinde, TouchMajor
ve TouchMinor
alanları eşit olacaktır.
Benzer şekilde, ToolMajor
alanı daha uzun boyutu belirtir ve ToolMinor
alanı, aracın kesit alanının daha kısa boyutunu belirtir.
Dokunma boyutu yoksa ancak alet boyutu mevcutsa, alet boyutu dokunma boyutuna eşit olarak ayarlanacaktır. Tersine, takım boyutu yoksa ancak dokunma boyutu mevcutsa, dokunma boyutu takım boyutuna eşit olacaktır.
Dokunmatik cihazlar, dokunma boyutunu ve takım boyutunu çeşitli şekillerde ölçer veya bildirir. Mevcut uygulama, üç farklı türde ölçümü desteklemektedir: yüzey birimlerindeki çap, alan ve geometrik sınırlayıcı kutu.
touch.size.calibration
Tanım: touch.size.calibration
= none
| geometric
| diameter
| area
| default
Dokunma boyutunu ve araç boyutunu bildirmek için dokunmatik sürücü tarafından kullanılan ölçüm türünü belirtir.
Değer
none
ise, boyut sıfır olarak ayarlanır.Değer
geometric
ise, boyutun konumla aynı yüzey birimlerinde belirtileceği varsayılır, bu nedenle aynı şekilde ölçeklenir.Değer
diameter
ise, boyutun dokunma veya aletin çapı (genişliği) ile orantılı olduğu varsayılır.Değer
area
ise, boyutun dokunma veya aletin alanıyla orantılı olduğu varsayılır.Değer
default
ise, sistemraw.touchMajor
veyaraw.toolMajor
ekseni mevcutsageometric
kalibrasyonu kullanır, aksi takdirde kalibrasyonunone
kullanır.
touch.size.scale
Tanım: touch.size.scale
= <a negatif olmayan kayan nokta sayısı>
Kalibrasyonda kullanılan sabit bir ölçek faktörünü belirtir.
Varsayılan değer 1.0
.
touch.size.bias
Tanım: touch.size.bias
= <a negatif olmayan kayan nokta sayısı>
Kalibrasyonda kullanılan sabit bir sapma 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ı raporlanacağını belirtir.
Değer
1
ise, bildirilen boyut kullanımdan önce kişi sayısına bölünecektir.Değer
0
ise, rapor edilen boyut olduğu gibi kullanılacaktır.
Varsayılan değer 0
.
Bazı dokunmatik cihazlar, özellikle "Yarı-MT" cihazlar, birden fazla kontağın ayrı boyutlarını ayırt edemediğinden, toplam alan veya genişliğini temsil eden bir boyut ölçümü bildirirler. Bu özellik, bu tür cihazlar için yalnızca 1
olarak ayarlanmalıdır. Şüpheniz varsa, bu değeri 0
.
Hesaplama
TouchMajor
, TouchMinor
, ToolMajor
, ToolMinor
ve Size
alanlarının hesaplanması, 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
Pressure
Alanı
Pressure
alanı, dokunmatik cihaza uygulanan yaklaşık fiziksel basıncı 0,0 (dokunma yok) ile 1,0 (tam kuvvet) arasında normalleştirilmiş bir değer olarak tanımlar.
Sıfır basınç, aletin havada durduğunu gösterir.
touch.pressure.calibration
Tanım: touch.pressure.calibration
= none
| physical
| amplitude
| default
Dokunmatik sürücü tarafından basıncı rapor etmek için kullanılan ölçüm türünü belirtir.
Değer
none
değilse, basınç bilinmez, bu nedenle dokunurken 1.0 ve gezinirken 0.0 olarak ayarlanır.If the value is
physical
, the pressure axis is assumed to measure the actual physical intensity of pressure applied to the touch pad.If the value is
amplitude
, the pressure axis is assumed to measure the signal amplitude, which is related to the size of the contact and the pressure applied.If the value is
default
, the system uses thephysical
calibration if the pressure axis available, otherwise usesnone
.
touch.pressure.scale
Definition: touch.pressure.scale
= <a non-negative floating point number>
Specifies a constant scale factor used in the calibration.
The default value is 1.0 / raw.pressure.max
.
Calculation
The calculation of the Pressure
field depends on the specified calibration parameters.
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
Orientation
and Tilt
Fields
The Orientation
field describes the orientation of the touch and tool as an angular measurement. An orientation of 0
indicates that the major axis is oriented vertically, -PI/2
indicates that the major axis is oriented to the left, PI/2
indicates that the major axis is oriented to the right. When a stylus tool is present, the orientation range may be described in a full circle range from -PI
or PI
.
The Tilt
field describes the inclination of the tool as an angular measurement. A tilt of 0
indicates that the tool is perpendicular to the surface. A tilt of PI/2
indicates that the tool is flat on the surface.
touch.orientation.calibration
Definition: touch.orientation.calibration
= none
| interpolated
| vector
| default
Specifies the kind of measurement used by the touch driver to report the orientation.
If the value is
none
, the orientation is unknown so it is set to 0.If the value is
interpolated
, the orientation is linearly interpolated such that a raw value ofraw.orientation.min
maps to-PI/2
and a raw value ofraw.orientation.max
maps toPI/2
. The center value of(raw.orientation.min + raw.orientation.max) / 2
maps to0
.If the value is
vector
, the orientation is interpreted as a packed vector consisiting of two signed 4-bit fields. This representation is used on Atmel Object Based Protocol parts. When decoded, the vector yields an orientation angle and confidence magnitude. The confidence magnitude is used to scale the size information, unless it is geometric.If the value is
default
, the system uses theinterpolated
calibration if the orientation axis available, otherwise usesnone
.
Calculation
The calculation of the Orientation
and Tilt
fields depends on the specified calibration parameters and available input.
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
Distance
Field
The Distance
field describes the distance between the tool and the touch device surface. A value of 0.0 indicates direct contact and larger values indicate increasing distance from the surface.
touch.distance.calibration
Definition: touch.distance.calibration
= none
| scaled
| default
Specifies the kind of measurement used by the touch driver to report the distance.
If the value is
none
, the distance is unknown so it is set to 0.If the value is
scaled
, the reported distance is multiplied by a constant scale factor.If the value is
default
, the system uses thescaled
calibration if the distance axis available, otherwise usesnone
.
touch.distance.scale
Definition: touch.distance.scale
= <a non-negative floating point number>
Specifies a constant scale factor used in the calibration.
The default value is 1.0
.
Calculation
The calculation of the Distance
field depends on the specified calibration parameters.
If touch.distance.calibration == "scaled": output.distance = raw.distance * touch.distance.scale Else output.distance = 0 End If
Example
# 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 will 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
Compatibility Notes
The configuration properties for touch devices changed significantly in Android Ice Cream Sandwich 4.0. All input device configuration files for touch devices must be updated to use the new configuration properties.
Older touch device drivers may also need to be updated.
Virtual Key Map Files
Touch devices are often used to implement virtual keys.
There are several ways of doing this, depending on the capabilities of the touch controller. Some touch controllers can be directly configured to implement soft keys by setting firmware registers. Other times it is desirable to perform the mapping from touch coordinates to key codes in software.
When virtual keys are implemented in software, the kernel must export a virtual key map file called virtualkeys.<devicename>
as a board property. For example, if the touch screen device drivers reports its name as "touchyfeely" then the virtual key map file must have the path /sys/board_properties/virtualkeys.touchyfeely
.
A virtual key map file describes the coordinates and Linux key codes of virtual keys on the touch screen.
In addition to the virtual key map file, there must be a corresponding key layout file and key character map file to map the Linux key codes to Android key codes and to specify the type of the keyboard device (usually SPECIAL_FUNCTION
).
Syntax
A virtual key map file is a plain text file consisting of a sequence of virtual key layout descriptions either separated by newlines or by colons.
Comment lines begin with '#' and continue to the end of the line.
Each virtual key is described by 6 colon-delimited components:
-
0x01
: A version code. Must always be0x01
. - <Linux key code>: The Linux key code of the virtual key.
- <centerX>: The X pixel coordinate of the center of the virtual key.
- <centerY>: The Y pixel coordinate of the center of the virtual key.
- <width>: The width of the virtual key in pixels.
- <height>: The height of the virtual key in pixels.
All coordinates and sizes are specified in terms of the display coordinate system.
Here is a virtual key map file all written on one line.
# 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
The same virtual key map file can also be written on multiple lines.
# 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
In the above example, the touch screen has a resolution of 480x800. Accordingly, all of the virtual keys have a <centerY> coordinate of 835, which is a little bit below the visible area of the touch screen.
The first key has a Linux scan code of 158
( KEY_BACK
), centerX of 55
, centerY of 835
, width of 90
and height of 55
.
Example
Virtual key map file: /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
Key layout file: /system/usr/keylayout/touchyfeely.kl
.
key 158 BACK key 139 MENU key 172 HOME key 217 SEARCH
Key character map file: /system/usr/keychars/touchyfeely.kcm
.
type SPECIAL_FUNCTION
Indirect Multi-touch Pointer Gestures
In pointer mode, the system interprets the following gestures:
Single finger tap: click.
Single finger motion: move the pointer.
Single finger motion plus button presses: drag the pointer.
Two finger motion both fingers moving in the same direction: drag the area under the pointer in that direction. The pointer itself does not move.
Two finger motion both fingers moving towards each other or apart in different directions: pan/scale/rotate the area surrounding the pointer. The pointer itself does not move.
Multiple finger motion: freeform gesture.