Android, ekran kalemi tabanlı dijitalleştirici tabletler de dahil olmak üzere çeşitli dokunmatik ekranları ve dokunmatik yüzeyleri destekler.
Dokunmatik ekranlar, kullanıcının ekrandaki öğeleri doğrudan değiştirdiği izlenimini verecek şekilde bir ekranla ilişkilendirilmiş dokunmatik cihazlardır.
Dokunmatik yüzeyler, dijitalleştirici tablet gibi bir ekranla ilişkili olmayan dokunmatik cihazlardır. Dokunmatik yüzeyler genellikle işaretleme, mutlak dolaylı konumlandırma veya kullanıcı arayüzünün hareket tabanlı kontrolü için kullanılır.
Dokunmatik cihazlarda, fare düğmelerine benzer işlevleri olan düğmeler bulunabilir.
Dokunmatik cihazlar, temel dokunmatik sensör teknolojisine bağlı olarak bazen parmak veya ekran kalemi gibi çeşitli araçlar kullanılarak kontrol 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ı bir tuş takımının parçası olarak ikili amaca hizmet eder.
Dokunmatik cihazların çeşitliliği nedeniyle Android, her cihazın özelliklerini ve istenen davranışını açıklamak için çok sayıda yapılandırma özelliğinden yararlanır.
Dokunmatik cihaz sınıflandırması
Aşağıdaki koşulların her ikisi de karşılanıyorsa giriş cihazı çoklu dokunma cihazı olarak sınıflandırılır:
- Giriş cihazı,
ABS_MT_POSITION_XveABS_MT_POSITION_Ymutlak eksenlerinin varlığını bildirir. - Giriş cihazında oyun kumandası düğmesi yok. Bu koşul, MT eksenleriyle çakışan kodlarla eksenleri bildiren belirli oyun kumandalarıyla ilgili bir belirsizliği çözer.
Aşağıdaki koşulların her ikisi de geçerliyse giriş cihazı tek dokunuşlu cihaz olarak sınıflandırılır:
- Giriş cihazı, çoklu dokunma cihazı olarak sınıflandırılmamıştır. Bir giriş cihazı tek dokunmatik cihaz veya çoklu dokunmatik cihaz olarak sınıflandırılır, asla her ikisi birden olmaz.
- Giriş cihazı,
ABS_XveABS_Ymutlak eksenlerinin veBTN_TOUCHtuş kodunun varlığını bildirir.
Bir giriş cihazı dokunmatik cihaz olarak sınıflandırıldığında sanal tuşların varlığı, cihazın sanal tuş eşleme dosyasını yüklemeye çalışarak belirlenir. Sanal tuş eşleme varsa cihazın tuş düzeni dosyası da yüklenir. Bu dosyaların konumu ve biçimi hakkında bilgi için [Sanal tuş eşleme dosyaları](#virtual-key-map-files) bölümüne bakın.
Ardından sistem, dokunmatik cihaz için 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 olan varsayılan bir yapılandırma seçer. Bu varsayılanlar, yerleşik dokunmatik ekranlar için tasarlanmamıştır ve yanlış davranışlara neden olabilir.
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.
- Dokunmatik ekranlı cihazlar, ekrandaki nesneleri doğrudan değiştirmek için kullanılır. Kullanıcı doğrudan ekrana dokunduğu için sistem, üzerinde işlem yapılan nesneleri belirtmek için ek bir olanak gerektirmez.
- Dokunmatik yüzey cihazı, belirli bir sensör alanındaki dokunmalarla ilgili mutlak konumlandırma bilgilerini bir uygulamaya sağlamak için kullanılır. Dijitalleştirici tabletler için kullanışlı olabilir.
- İşaretçi cihazı, ekrandaki nesneleri imleç kullanarak dolaylı olarak değiştirmek için kullanılır. Parmaklar, çoklu dokunma işaretçi hareketleri olarak yorumlanır. Ekran kalemi gibi diğer araçlar, mutlak konumlar kullanılarak yorumlanır. Daha fazla bilgi için Dolaylı çoklu dokunma işaretçi hareketleri bölümüne bakın.
Giriş cihazını dokunmatik ekran, dokunmatik yüzey veya işaretleme 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 şekilde ayarlanır.- Giriş cihazı,
INPUT_PROP_DIRECTgiriş özelliğinin varlığını bildirirse (EVIOCGPROPioctl aracılığıyla) cihaz türü dokunmatik ekran olarak ayarlanır. Bu koşul, doğrudan giriş dokunmatik cihazlarının bağlı bir ekrana da bağlı olduğunu varsayar. - Giriş cihazı,
INPUT_PROP_POINTERgiriş özelliğinin varlığını bildirirse (EVIOCGPROPioctl aracılığıyla) cihaz türü pointer olarak ayarlanır. - Giriş cihazı,
REL_XveyaREL_Ygöreli eksenlerinin varlığını bildirirse cihaz türü dokunmatik yüzey olarak ayarlanır. Bu koşul, hem fare hem de dokunmatik yüzeyden oluşan giriş cihazlarıyla ilgili belirsizliği giderir. Bu durumda, fare işaretçiyi zaten kontrol ettiğinden dokunmatik yüzey işaretçiyi kontrol etmek için kullanılmaz. - Aksi takdirde cihaz türü pointer 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 ek işlevler gerçekleştirmek için kullanabileceği isteğe bağlı kontrollerdir. Dokunmatik cihazlardaki düğmeler, fare düğmelerine benzer şekilde davranır ve genellikle işaretçi türü dokunmatik cihazlarda veya ekran kalemiyle kullanılır.
Aşağıdaki düğmeler desteklenir:
BTN_LEFT:MotionEvent.BUTTON_PRIMARYile eşlendi.BTN_RIGHT:MotionEvent.BUTTON_SECONDARYile eşlendi.BTN_MIDDLE:MotionEvent.BUTTON_MIDDLEile eşlendi.BTN_BACKveBTN_SIDE:MotionEvent.BUTTON_BACKile eşlendi. Bu düğmeye basıldığındaKeyEvent.KEYCODE_BACKtuş koduyla bir tuş basımı da sentezlenir.BTN_FORWARDveBTN_EXTRA:MotionEvent.BUTTON_FORWARDile eşlendi. Bu düğmeye basıldığındaKeyEvent.KEYCODE_FORWARDtuş koduna sahip bir tuş basımı da sentezlenir.BTN_STYLUS:MotionEvent.BUTTON_SECONDARYile eşlendi.BTN_STYLUS2:MotionEvent.BUTTON_TERTIARYile eşlendi.
Araçlar ve araç türleri
Araç, dokunmatik cihazla etkileşim kurmak için kullanılan parmak, ekran kalemi veya başka bir cihazdır. Bazı dokunmatik cihazlar farklı araç türlerini ayırt edebilir.
Android'in diğer bölümlerinde (ör. MotionEvent API'si) araçlar genellikle işaretçi olarak adlandırılır.
Aşağıdaki araç türleri desteklenir:
BTN_TOOL_FINGERveMT_TOOL_FINGER:MotionEvent.TOOL_TYPE_FINGERile eşlendi.BTN_TOOL_PENveMT_TOOL_PEN:MotionEvent.TOOL_TYPE_STYLUSile eşlendi.BTN_TOOL_RUBBER:MotionEvent.TOOL_TYPE_ERASERile eşlendi.BTN_TOOL_BRUSH:MotionEvent.TOOL_TYPE_STYLUSile eşlendi.BTN_TOOL_PENCIL:MotionEvent.TOOL_TYPE_STYLUSile eşlendi.BTN_TOOL_AIRBRUSH:MotionEvent.TOOL_TYPE_STYLUSile eşlendi.BTN_TOOL_MOUSE:MotionEvent.TOOL_TYPE_MOUSEile eşlendi.BTN_TOOL_LENS:MotionEvent.TOOL_TYPE_MOUSEile eşlendi.BTN_TOOL_DOUBLETAP,BTN_TOOL_TRIPLETAPveBTN_TOOL_QUADTAP:MotionEvent.TOOL_TYPE_FINGERile eşlenir.
Araçların üzerine gelme ve araçlara dokunma
Araçlar, dokunmatik cihazla temas halinde veya cihazın kapsama alanında ve üzerinde geziniyor olabilir. Dokunmatik cihazların tümü, cihazın üzerinde gezinen bir aracın varlığını algılayamaz. RF tabanlı ekran kalemi sayısallaştırıcılar gibi bu özelliği destekleyen cihazlar, genellikle aracın sayısallaştırıcının sınırlı bir menzilinde olduğunu algılayabilir.
InputReader bileşeni, dokunma araçlarını fareyle üzerine gelme araçlarından ayırır. Benzer şekilde, dokunma araçları ve üzerine gelme araçları 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 etkinlikleri olarak bildirilir.
Üzerinde gezinme araçları, MotionEvent.ACTION_HOVER_ENTER, MotionEvent.ACTION_HOVER_MOVE ve MotionEvent.ACTION_HOVER_EXIT kullanılarak uygulamalara genel hareket etkinlikleri olarak bildirilir.
Dokunmatik cihaz sürücüsü gereksinimleri
- Dokunmatik cihaz sürücüleri yalnızca destekledikleri eksenler ve düğmeler için eksenleri ve tuş kodlarını kaydetmelidir. Desteklenmeyen eksenlerin veya tuş kodlarının kaydedilmesi, cihaz sınıflandırma algoritmasının kafasını karıştırabilir veya sistemin cihazın özelliklerini yanlış algılamasına neden olabilir. Örneğin, cihaz
BTN_TOUCHtuş kodunu bildirirse sistem, aracın ekrana dokunup dokunmadığını belirtmek için her zamanBTN_TOUCHtuşunun kullanıldığını varsayar. Bu nedenleBTN_TOUCH, aracın yalnızca menzil içinde olduğunu ve üzerine gelindiğini belirtmek için kullanılmamalıdır. - 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ı) Aracın ucuna uygulanan fiziksel basıncı veya dokunma temasının sinyal gücünü bildirir.ABS_TOOL_WIDTH: (isteğe bağlı) Dokunma temasının veya aracın kendisinin kesit alanını ya da genişliğini bildirir.ABS_DISTANCE: (isteğe bağlı) Aracın dokunmatik cihazın yüzeyine olan mesafesini bildirir.ABS_TILT_X: (isteğe bağlı) Aracın, dokunmatik cihazın yüzeyinden X ekseni boyunca eğimini bildirir.ABS_TILT_Y: (isteğe bağlı) Aracın, dokunmatik cihazın yüzeyinden Y ekseni boyunca eğimini bildirir.BTN_TOUCH: (ZORUNLU) Aracın cihaza dokunup dokunmadığını gösterir.BTN_LEFT,BTN_RIGHT,BTN_MIDDLE,BTN_BACK,BTN_SIDE,BTN_FORWARD,BTN_EXTRA,BTN_STYLUS,BTN_STYLUS2: (isteğe bağlı) Düğme durumlarını bildirir.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 dokunmatik 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ı) Aracın ucuna uygulanan fiziksel basıncı veya dokunma temasının sinyal gücünü bildirir.ABS_MT_TOUCH_MAJOR: (isteğe bağlı) Dokunma temasının kesit alanını veya dokunma temasının daha uzun boyutunun uzunluğunu bildirir.ABS_MT_TOUCH_MINOR: (isteğe bağlı) Dokunma temasının daha kısa boyutunun uzunluğunu bildirir.ABS_MT_TOUCH_MAJORbir alan ölçümü bildiriyorsa bu eksen kullanılmamalıdır.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ı) Aracın daha kısa boyutunun uzunluğunu bildirir.ABS_MT_WIDTH_MAJORbir alan ölçümü bildiriyorsa 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ı) Araç türünüMT_TOOL_FINGERveyaMT_TOOL_PENolarak bildirir.ABS_MT_TRACKING_ID: (isteğe bağlı) Aracın izleme kimliğini bildirir. İzleme kimliği, birden fazla araç etkin olduğunda her bir aracı bağımsız olarak tanımlamak ve izlemek için kullanılan, rastgele seçilmiş negatif olmayan bir tam sayıdır. Örneğin, birden fazla parmak cihaza dokunduğunda her parmağa, parmak temas halinde olduğu sürece kullanılan ayrı bir izleme kimliği atanmalıdır. Takip kimlikleri, ilişkili araçlar kapsama alanı 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 bildirir. Daha fazla bilgi için Linux çoklu dokunma protokolü belgelerine bakın.BTN_TOUCH: (ZORUNLU) Aracın cihaza dokunup dokunmadığını gösterir.BTN_LEFT,BTN_RIGHT,BTN_MIDDLE,BTN_BACK,BTN_SIDE,BTN_FORWARD,BTN_EXTRA,BTN_STYLUS,BTN_STYLUS2: (isteğe bağlı) Düğme durumlarını raporlar.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 çoklu dokunma eksenleri kullanılır ve tek dokunma eksenleri yoksayılır.
ABS_X,ABS_Y,ABS_MT_POSITION_XveABS_MT_POSITION_Yeksenlerinin minimum ve maksimum değerleri, cihaza özel yüzey birimlerinde cihazın etkin alanının sınırlarını tanımlar. Dokunmatik ekran söz konusu olduğunda etkin alan, dokunmatik cihazın ekranı kaplayan kısmını tanımlar.Dokunmatik ekranlarda sistem, bildirilen dokunma konumlarını yüzey birimlerinde otomatik olarak enterpolasyon yaparak aşağıdaki hesaplamaya göre ekran piksellerinde dokunma konumlarını elde eder:
displayX = (x - minX) * displayWidth / (maxX - minX + 1) displayY = (y - minY) * displayHeight / (maxY - minY + 1)Dokunmatik ekran, bildirilen etkin alanın dışındaki dokunmaları bildirebilir.
Etkin alanın dışında başlatılan dokunmalar uygulamalara iletilmez ancak sanal tuşlar için kullanılabilir.
Etkin alanın içinde başlatılan veya görüntüleme alanına girip çıkan dokunmalar uygulamalara iletilir. Bu nedenle, bir dokunma işlemi uygulamanın sınırları içinde başlayıp etkin alanın dışına taşınırsa uygulama, negatif veya ekran sınırlarının dışında ekran koordinatlarına sahip dokunma etkinlikleri alabilir. Bu, beklenen bir davranıştır.
Dokunmatik cihazlar, dokunma koordinatlarını hiçbir zaman etkin alanın sınırlarına sabitlememelidir. Dokunma etkin alanın dışına çıkarsa etkin alanın dışında olduğu bildirilmeli veya hiç bildirilmemelidir.
Ö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, etkin alanın dışına doğru hareket etmeye devam ederse dokunmatik ekran, minX ve minY'den daha küçük bileşenlere sahip koordinatları (ör. minX - 2, minY - 3) bildirmeye başlamalı veya dokunmayı bildirmeyi tamamen durdurmalıdır. Başka bir deyişle, kullanıcının parmağı etkin alanın dışına dokunduğunda dokunmatik ekran (minX, minY) değerini bildirmemelidir.
Dokunma koordinatlarını ekran kenarına sabitlemek, ekran kenarında yapay bir sert sınır oluşturur. Bu sınır, sistemin ekran alanının sınırlarına giren veya sınırlardan çıkan hareketleri sorunsuz bir şekilde izlemesini engeller.
ABS_PRESSUREveyaABS_MT_PRESSUREtarafından bildirilen değerler, bildirildikleri takdirde, araç cihaza dokunurken sıfır dışında bir değer, aksi takdirde aracın üzerine geldiğini belirtmek için sıfır olmalıdır.Basınç bilgilerini bildirmek 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_MAJORveyaABS_MT_WIDTH_MINORtarafından bildirilen değerler, araç cihaza dokunurken sıfır olmamalı, aksi takdirde sıfır olmalıdır ancak bu zorunlu değildir. Örneğin, dokunmatik cihaz parmakla dokunma temaslarının boyutunu ölçebilir ancak ekran kalemiyle dokunma temaslarını ölçemeyebilir.Boyut bilgilerini bildirmek isteğe bağlıdır ancak kesinlikle önerilir. Uygulamalar, boyuta duyarlı çizim ve diğer efektleri uygulamak için basınç bilgilerini kullanabilir.
Araç cihaza dokunduğunda
ABS_DISTANCEveyaABS_MT_DISTANCEtarafından bildirilen değerler sıfıra yaklaşmalıdır. Araç doğrudan temas halinde olsa bile mesafe sıfırdan farklı kalabilir. Bildirilen tam değerler, donanımın mesafeyi ölçme şekline bağlıdır.Mesafe bilgilerinin raporlanması isteğe bağlıdır ancak ekran kalemi cihazları için önerilir.
Araç cihaza dik olduğunda
ABS_TILT_XveABS_TILT_Ytarafından bildirilen değerler sıfır olmalıdır. Sıfır olmayan bir eğim, aracın eğimli tutulduğunu gösterir.X ve Y eksenleri boyunca eğim açılarının, dikeyden derece cinsinden belirtildiği varsayılır. Merkez noktası (tam dik), her eksen için
(max + min) / 2ile verilir. Merkez noktasından küçük değerler yukarı veya sola eğimi, merkez noktasından büyük değerler ise aşağı veya sağa eğimi temsil eder.InputReader, X ve Y eğim bileşenlerini 0 ilePI / 2radyan arasında değişen dikey eğim açısına ve-PIilePIradyan arasında değişen düzlemsel yön açısına dönüştürür. Bu gösterim, parmak dokunuşlarını tanımlamak için kullanılanla uyumlu bir yönlendirme açıklamasıyla sonuçlanır.Eğim bilgilerini bildirmek isteğe bağlıdır ancak ekran kalemi cihazları için önerilir.
Araç türü
ABS_MT_TOOL_TYPEtarafından bildirilirseBTN_TOOL_*tarafından bildirilen tüm araç türü bilgilerinin yerini alır. Araç türü bilgisi yoksa araç türü varsayılan olarakMotionEvent.TOOL_TYPE_FINGERolur.Bir aracın etkin olup olmadığı aşağıdaki koşullara göre belirlenir:
Tek dokunuş protokolü kullanılırken
BTN_TOUCHveyaBTN_TOOL_*1 ise araç etkindir.Bu koşul,
InputReadermodelinin aracın doğası hakkında en azından bazı bilgilere (ör. dokunup dokunmadığı veya en azından araç türü) sahip olması gerektiği anlamına gelir. Bilgi yoksa aracın etkin olmadığı (aralık dışında) varsayılır.- Çoklu dokunma protokolü "A" kullanılırken araç, en son senkronizasyon raporunda göründüğü her an etkindir. Araç, senkronizasyon raporlarında görünmeyi bıraktığında artık mevcut değildir.
- Çoklu dokunma protokolü "B" kullanılırken araç, etkin bir yuvası olduğu sürece etkindir. Yuva temizlendiğinde araç kaybolur.
- Bir aracın, aşağıdaki koşullara göre üzerine gelindiği belirlenir:
- Araç
BTN_TOOL_MOUSEveyaBTN_TOOL_LENSise aşağıdaki koşullardan biri doğru olsa bile araç fareyle üzerine gelme durumunda değildir. - Araç etkinse ve sürücü basınç bilgisi bildiriyorsa ve bildirilen basınç sıfırsa araç, üzerine gelme durumundadır.
- Araç etkinse ve sürücü
BTN_TOUCHtuş kodunu destekliyorsa veBTN_TOUCHdeğeri sıfırsa araç, fareyle üzerine gelme durumundadır.
- Araç
InputReader, hem çoklu dokunma protokolü "A"yı hem de "B"yi destekler. Yeni sürücüler "B" protokolünü kullanmalıdır ancak her ikisi de çalışır.Android 4.0'dan itibaren, dokunmatik ekran sürücülerinin Linux giriş protokolü spesifikasyonuna uyması için değiştirilmesi gerekebilir.
Aşağıdaki değişiklikler gerekli olabilir:
Bir araç devre dışı kaldığında (parmak "yukarı" gittiğinde), sonraki çoklu dokunma senkronizasyon raporlarında görünmeyi durdurmalıdır. Tüm araçlar devre dışı kaldığında (tüm parmaklar "yukarı" kalktığında) sürücü, boş bir senkronizasyon raporu paketi (ör.
SYN_MT_REPORTve ardındanSYN_REPORT) göndermelidir.Android'in önceki sürümleri, "yukarı" etkinliklerinin 0 basınç değeri gönderilerek bildirilmesini bekliyordu. Eski davranış, Linux giriş protokolü spesifikasyonuyla uyumlu değildi ve artık desteklenmiyor.
Fiziksel basınç veya sinyal gücü bilgileri
ABS_MT_PRESSUREkullanılarak bildirilmelidir.Android'in önceki sürümleri, basınç bilgilerini
ABS_MT_TOUCH_MAJORüzerinden alıyordu. Eski davranış, Linux giriş protokolü spesifikasyonuyla uyumlu değildi ve artık desteklenmiyor.- Dokunma boyutu bilgileri
ABS_MT_TOUCH_MAJORkullanılarak bildirilmelidir.Android'in önceki sürümleri, boyut bilgilerini
ABS_MT_TOOL_MAJORüzerinden alıyordu. Eski davranış, Linux giriş protokolü spesifikasyonuyla uyumlu değildi ve artık desteklenmiyor.
Dokunmatik cihaz işlemi
Aşağıda, Android'de dokunmatik cihaz kullanımının kısa bir özeti verilmiştir.
EventHub,evdevsürücüsünden ham etkinlikleri okur.InputReader, ham etkinlikleri kullanır ve her aracın konumu ve diğer özellikleri hakkındaki dahili durumu günceller. Ayrıca düğme durumlarını da izler.- GERİ veya İLERİ tuşuna basıldıysa ya da bu tuşlar bırakıldıysa
InputReader,InputDispatcheröğesini tuş etkinliği hakkında bilgilendirir. InputReader, sanal bir tuşa basılıp basılmadığını belirler. ÖyleyseInputDispatcher, önemli etkinlik hakkında bilgilendirilir.InputReader, dokunma işleminin ekran sınırları içinde başlatılıp başlatılmadığını belirler. ÖyleyseInputDispatcheröğesini dokunma etkinliği hakkında bilgilendirir.- Dokunan araç yoksa ancak en az bir tane üzerine gelme aracı varsa
InputReader,InputDispatcheruygulamasını üzerine gelme etkinliği hakkında bilgilendirir. - Dokunmatik cihaz türü pointer ise
InputReader, işaretçi hareketi algılama işlemini gerçekleştirir, işaretçiyi ve noktaları buna göre hareket ettirir veInputDispatcher'yi işaretçi etkinliği hakkında bilgilendirir. InputDispatcher, etkinliklerin gönderilmesi ve cihazı uyandırması gerekip gerekmediğini belirlemek içinWindowManagerPolicykullanı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üzeni tarafından 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, dokunmatik cihaz davranışını yapılandırmak ve kalibre etmek için birçok giriş cihazı yapılandırma özelliğini kullanır.
Bunun bir nedeni, dokunmatik cihazların cihaz sürücülerinin genellikle dokunma özelliklerini cihaza özel birimler kullanarak bildirmesidir.
Örneğin, birçok dokunmatik cihaz, dokunma temas alanını ölçer. cihaza özgü dahili bir ölçek (ör. toplam sayı) kullanma dokunma tarafından tetiklenen sensör düğümleri. Bu ham boyut değeri, uygulamalar için anlamlı olmaz. Çünkü uygulamaların, dokunmatik cihaz sensör düğümlerinin fiziksel boyutunu ve diğer özelliklerini bilmesi gerekir.
Sistem, giriş cihazı yapılandırma dosyalarında kodlanmış kalibrasyon parametrelerini kullanarak dokunmatik cihaz tarafından bildirilen değerlerin kodunu çözer, dönüştürür ve uygulamaların anlayabileceği daha basit bir standart gösterime normalleştirir.
Belge 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.
İşlenmemiş eksen değerleri
Aşağıdaki ifadeler, dokunmatik cihaz sürücüsü tarafından EV_ABS etkinlikleri olarak bildirilen ham değerleri gösterir.
raw.xABS_XveyaABS_MT_POSITION_Xekseninin değeri.raw.yABS_YveyaABS_MT_POSITION_Yekseninin değeri.raw.pressureABS_PRESSUREveyaABS_MT_PRESSUREekseninin değeri ya da yoksa 0.raw.touchMajorABS_MT_TOUCH_MAJORekseninin değeri veya yoksa 0.raw.touchMinorABS_MT_TOUCH_MINORekseninin değeri veya yoksaraw.touchMajor.raw.toolMajorABS_TOOL_WIDTHveyaABS_MT_WIDTH_MAJORekseninin değeri ya da yoksa 0.raw.toolMinorABS_MT_WIDTH_MINORekseninin değeri veya yoksaraw.toolMajor.raw.orientationABS_MT_ORIENTATIONekseninin değeri veya yoksa 0.raw.distanceABS_DISTANCEveyaABS_MT_DISTANCEekseninin değeri ya da yoksa 0.raw.tiltXABS_TILT_Xekseninin değeri veya yoksa 0.raw.tiltYABS_TILT_Yekseninin değeri veya yoksa 0.
Ham eksen aralıkları
Aşağıdaki ifadeler, ham değerlerin sınırlarını gösterir. Her eksen için EVIOCGABS ioctl çağrılarak elde edilirler.
raw.*.min- Ham eksenin dahil edilen minimum değeri.
raw.*.max- Ham eksenin dahil edilen maksimum değeri.
raw.*.rangeraw.*.max - raw.*.minetiketine eşdeğer.raw.*.fuzz- Ham eksenin doğruluğu. Örneğin, fuzz = 1, değerlerin +/- 1 birim doğrulukta olduğunu gösterir.
raw.width- Dokunma alanının
raw.x.range + 1değerine eşdeğer olan kapsayıcı genişliği. raw.height- Dokunma alanının
raw.y.range + 1değerine eşit olan kapsayıcı yüksekliği.
Çıkış aralıkları
Aşağıdaki ifadeler, çıkış koordinat sisteminin özelliklerini belirtir. Sistem, dokunma konumu bilgilerini dokunmatik cihaz tarafından kullanılan yüzey birimlerinden, ekran pikselleri gibi uygulamalara bildirilen çıkış birimlerine çevirmek için doğrusal interpolasyon kullanır.
output.width- Çıkış genişliği. Dokunmatik ekranlar (bir ekranla ilişkili) için bu, piksel cinsinden ekran genişliğidir. Dokunmatik yüzeylerde (ekranla ilişkili olmayan), çıkış genişliği
raw.widthdeğerine eşittir. Bu, enterpolasyon yapılmadığını gösterir. output.height- Çıkış yüksekliği. Dokunmatik ekranlar (bir ekranla ilişkili) için bu, piksel cinsinden ekran yüksekliğidir. Dokunmatik yüzeyler için (bir ekranla ilişkili olmayan), çıkış yüksekliği
raw.heightdeğerine eşittir. Bu, enterpolasyon yapılmadığını gösterir. output.diag- Çıkış koordinat sisteminin çapraz uzunluğu,
sqrt(output.width ^2 + output.height ^2)değerine eşdeğerdir.
Temel yapılandırma
Dokunmatik giriş eşleyici, 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 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çıklanmıştır.
touch.deviceType
Tanım: touch.deviceType = touchScreen |
touchPad | pointer | default
Dokunmatik cihaz türünü belirtir.
-
Değer
touchScreenise dokunmatik cihaz, bir ekranla ilişkili dokunmatik ekrandır. -
Değer
touchPadise dokunmatik cihaz, bir ekranla ilişkilendirilmemiş bir dokunmatik alandır. -
Değer
pointerise dokunmatik cihaz, bir ekranla ilişkili olmayan bir dokunmatik yüzeydir ve hareketleri dolaylı çoklu dokunma işaretçi hareketleri için kullanılır. -
Değer
defaultise 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ı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
1ise dokunmatik cihaz tarafından bildirilen dokunma konumları, ekran yönü her değiştiğinde döndürülür. -
Değer
0ise dokunmatik cihaz tarafından bildirilen dokunma konumları, ekran yönü değişikliklerinden etkilenmez.
Cihaz dokunmatik ekransa varsayılan değer 1, aksi takdirde 0 olur.
Sistem, dahili ve harici dokunmatik ekranlar ile ekranlar arasında ayrım yapar. Yönü algılayan dahili dokunmatik ekran, dahili ekranın yönüne göre döndürülür. Yöne duyarlı harici dokunmatik ekran, harici ekranın yönüne göre döndürülür.
Yön algılama, Nexus One gibi cihazlarda dokunmatik ekranların döndürülmesini 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 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 sayede dokunmalar, uygulamaların görsel öğelerini çizmek için kullandığı koordinat sistemiyle raporlanır.
Honeycomb'dan önce tüm dokunmatik cihazların yönü algıladığı 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 pointer türündeyse geçerlidir.
-
Değer
pointerise dokunmatik yüzey hareketleri, fare işaretçisine benzer bir imleçle gösterilir. -
Değer
spotsise dokunmatik yüzey hareketleri, hareketin merkezini temsil eden bir sabitleyici ve her bir parmağın konumunu temsil eden bir dizi dairesel nokta ile 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 merkeziyle ilgili konum bilgileri sağlar.
Hesaplama
Hesaplama basittir: Dokunmatik sürücüden alınan konum bilgileri, çıkış koordinat sistemine doğrusal olarak interpolasyonla eklenir.
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ı, temas alanının yaklaşık boyutlarını çıkış birimleri (piksel) cinsinden açıklar.
toolMajor ve toolMinor alanları, aracın kendisinin yaklaşık boyutlarını çıkış birimleri (piksel) cinsinden açıklar.
size alanı, dokunma cihazının algılayabileceği mümkün olan en büyük dokunmaya göre dokunmanın normalleştirilmiş boyutunu açıklar. Mümkün olan en küçük normalleştirilmiş boyut 0,0 (temas yok veya ölçülemez), mümkün olan en büyük normalleştirilmiş boyut ise 1,0'dır (sensör alanı doymuş).
Hem yaklaşık uzunluk hem de genişlik ölçülebildiğinde touchMajor alanı, temas alanının daha uzun boyutunu, touchMinor alanı ise daha kısa boyutunu belirtir. Yalnızca temas alanının yaklaşık çapı ölçülebildiğinde touchMajor ve touchMinor alanları eşittir.
Benzer şekilde, toolMajor alanı daha uzun boyutu, toolMinor alanı ise aracın kesit alanının daha kısa boyutunu belirtir.
Dokunma boyutu kullanılamıyor ancak araç boyutu kullanılabiliyorsa araç boyutu, dokunma boyutuna eşit olarak ayarlanır. Buna karşılık, araç boyutu kullanılamıyor ancak dokunma boyutu kullanılabiliyorsa dokunma boyutu, araç boyutuna eşit olarak ayarlanır.
Dokunmatik cihazlar, dokunma boyutunu ve araç boyutunu çeşitli şekillerde ölçer veya bildirir. Mevcut uygulama üç farklı ölçüm türünü destekler: çap, alan ve yüzey birimlerinde geometrik sınırlayıcı kutu.
<touch.size.calibration< h4=""></touch.size.calibration<>
Tanım: touch.size.calibration = none |
geometric | diameter
| area | default
Dokunma sürücüsünün dokunma boyutunu ve araç boyutunu bildirmek için kullandığı ölçüm türünü belirtir.
-
Değer
noneise boyut sıfır olarak ayarlanır. -
Değer
geometricise boyutun konumla aynı yüzey birimlerinde belirtildiği varsayılır ve aynı şekilde ölçeklendirilir. -
Değer
diameterise boyutun, dokunma veya aracın çapıyla (genişlik) orantılı olduğu varsayılır. -
Değer
areaise boyutun, dokunma veya araç alanıyla orantılı olduğu varsayılır. -
Değer
defaultise sistem,raw.touchMajorveyaraw.toolMajorekseni mevcutsageometrickalibrasyonunu, aksi takdirdenonekalibrasyonunu kullanır.
touch.size.scale
Tanım: touch.size.scale = <negatif olmayan kayan noktalı sayı>
Kalibrasyonda kullanılan sabit bir ölçeklendirme faktörü belirtir.
Varsayılan değer: 1.0.
touch.size.bias
Tanım: touch.size.bias = <negatif olmayan kayan noktalı sayı>
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
1ise raporlanan boyut, kullanılmadan önce kişi sayısına bölünür. -
Değer
0ise bildirilen boyut olduğu gibi kullanılır.
Varsayılan değer: 0.
Bazı dokunmatik cihazlar, özellikle de "Semi-MT" cihazlar, birden fazla temasın ayrı ayrı boyutlarını ayırt edemez. Bu nedenle, toplam alanlarını veya genişliklerini temsil eden bir boyut ölçümü bildirirler. Bu özellik, bu tür cihazlar için yalnızca 1 olarak ayarlanmalıdır. Emin değilseniz bu değeri 0 olarak ayarlayın.
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
basınç alanı
pressure alanı, dokunmatik cihaza uygulanan yaklaşık fiziksel basıncı 0,0 (dokunma yok) ile 1,0 (normal basınç) arasında normalleştirilmiş bir değer olarak tanımlar.
Sıfır basınç, aracın havada durduğunu gösterir.
touch.pressure.calibration
Tanım: touch.pressure.calibration = none |
physical | amplitude | default
Dokunma sürücüsünün basıncı bildirmek için kullandığı ölçüm türünü belirtir.
-
Değer
noneise basınç bilinmediğinden dokunma sırasında 1,0, fareyle üzerine gelme sırasında 0,0 olarak ayarlanır. -
Değer
physicalise basınç ekseninin, dokunmatik yüzeye uygulanan basıncın gerçek fiziksel yoğunluğunu ölçtüğü varsayılır. -
Değer
amplitudeise basınç ekseninin, temasın boyutu ve uygulanan basınçla ilgili olan sinyal genliğini ölçtüğü varsayılır. -
Değer
defaultise sistem, basınç ekseni mevcutsaphysicalkalibrasyonunu, aksi takdirdenonekalibrasyonunu kullanır.
touch.pressure.scale
Tanım: touch.pressure.scale = <negatif olmayan kayan noktalı sayı>
Kalibrasyonda kullanılan sabit bir ölçeklendirme faktörü belirtir.
Varsayılan değer: 1.0 / raw.pressure.max.
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 olarak tanımlar. 0 yönü, ana eksenin dikey olarak yönlendirildiğini, -PI/2 ana eksenin sola yönlendirildiğini, PI/2 ise ana eksenin sağa yönlendirildiğini gösterir. Ekran kalemi aracı mevcut olduğunda yön aralığı, -PI veya PI değerinden tam daire aralığı olarak tanımlanabilir.
tilt alanı, aracın eğimini açısal ölçüm olarak tanımlar.
0 eğim, aracın yüzeye dik olduğunu gösterir.
PI/2 eğim, aracın yüzeyde düz olduğunu gösterir.
touch.orientation.calibration
Tanım: touch.orientation.calibration = none |
interpolated | vector | default
Dokunmatik sürücünün yönü bildirmek için kullandığı ölçüm türünü belirtir.
- Değer
noneise yön bilinmediği için 0 olarak ayarlanır. - Değer
interpolatedise yön,raw.orientation.minham değeri-PI/2ile veraw.orientation.maxham değeriPI/2ile eşleşecek şekilde doğrusal olarak enterpolasyona tabi tutulur.(raw.orientation.min + raw.orientation.max) / 2için orta değer0ile eşleşir. - Değer
vectorise yön, iki adet işaretli 4 bitlik alandan oluşan sıkıştırılmış bir vektör olarak yorumlanır. Bu gösterim, Atmel Nesne Tabanlı Protokol parçalarında kullanılır. Vektörün kodu çözüldüğünde bir yön açısı ve güven büyüklüğü elde edilir. Güven büyüklüğü, geometrik olmadığı sürece boyut bilgisini ölçeklendirmek için kullanılır. - Değer
defaultise sistem, yönlendirme ekseni mevcutsainterpolatedkalibrasyonunu, aksi takdirdenonekalibrasyonunu kullanır.
Hesaplama
orientation ve tilt alanlarının hesaplanması, belirtilen kalibrasyon parametrelerine ve mevcut girişe bağlıdır.
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 açıklar. 0,0 değeri doğrudan teması, daha büyük değerler ise yüzeyden uzaklığın arttığını gösterir.
touch.distance.calibration
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
noneise mesafe bilinmediği için 0 olarak ayarlanır. -
Değer
scaledise bildirilen mesafe, sabit bir ölçeklendirme faktörüyle çarpılır. -
Değer
defaultise sistem, mesafe ekseni mevcutsascaledkalibrasyonunu, aksi takdirdenonekalibrasyonunu kullanır.
touch.distance.scale
Tanım: touch.distance.scale = <negatif olmayan kayan noktalı sayı>
Kalibrasyonda kullanılan sabit bir ölçeklendirme faktörü belirtir.
Varsayılan değer: 1.0.
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ı
Dokunmatik cihazların yapılandırma özellikleri, Android Ice Cream Sandwich 4.0'da önemli ölçüde değişti. Dokunmatik cihazlar için 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ı
Sanal tuşları uygulamak için dokunmatik cihazlar kullanılabilir.
Dokunmatik kumandanın özelliklerine bağlı olarak bunu yapmanın birkaç yolu vardır. Bazı dokunmatik kumandalar, donanım yazılımı kayıtları ayarlanarak yazılım tuşlarını uygulayacak şekilde doğrudan yapılandırılabilir. Diğer durumlarda, dokunma koordinatlarından yazılımdaki tuş kodlarına eşleme yapılması tercih edilir.
Sanal tuşlar yazılımda uygulandığında çekirdek, virtualkeys.<devicename> adlı bir sanal tuş haritası dosyasını kart özelliği olarak dışa aktarmalıdır. Örneğin, dokunmatik ekran cihaz sürücüleri adını "touchyfeely" olarak bildirirse sanal tuş eşleme dosyasının yolu /sys/board_properties/virtualkeys.touchyfeely olmalıdır.
Sanal tuş eşleme dosyası, dokunmatik ekrandaki sanal tuşların koordinatlarını ve Linux tuş kodlarını açıklar.
Sanal tuş eşleme 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 eşleme dosyası olmalıdır.
Söz dizimi
Sanal tuş eşleme dosyası, yeni satırlarla veya iki nokta üst üste işaretleriyle ayrılmış bir dizi sanal tuş 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 eder.
Her sanal anahtar, iki nokta üst üste ile ayrılmış 6 bileşenle tanımlanır:
0x01: Sürüm kodu. Her zaman0x01olmalıdır.- <Linux tuş kodu>: Sanal tuşun Linux tuş kodu.
- <centerX>: Sanal tuşun merkezinin X piksel koordinatı.
- <centerY>: Sanal tuşun merkezinin Y piksel koordinatı.
- <width>: Sanal tuşun piksel cinsinden genişliği.
- <height>: Sanal tuşun piksel cinsinden yüksekliği.
Tüm koordinatlar ve boyutlar, ekran koordinat sistemi açısından belirtilir.
Aşağıda, tamamı tek bir satırda yazılmış bir sanal tuş eşleme dosyası verilmiştir.
# 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 tuş eşleme dosyası birden fazla satıra 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 değer, dokunmatik ekranın görünür alanının biraz altındadır.
İlk tuşun Linux tarama kodu 158 (KEY_BACK), centerX değeri 55, centerY değeri 835, genişliği 90 ve yüksekliği 55.
Örnek
Sanal tuş 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üzeni dosyası: /system/usr/keylayout/touchyfeely.kl.
key 158 BACK key 139 MENU key 172 HOME key 217 SEARCH
Tuş karakter eşleme 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:
- Tek parmakla dokunma: Tıklama.
- Tek parmak hareketi: İşaretçiyi hareket ettirin.
- Tek parmak hareketi ve düğmeye basma: İşaretçiyi sürükleyin.
- İki parmakla aynı yönde hareket: İşaretçinin altındaki alanı o yöne sürükler. İşaretçinin kendisi hareket etmez.
- İki parmağın farklı yönlerde birbirine doğru veya birbirinden uzağa hareket ettiği iki parmak hareketi: İşaretçiyi çevreleyen alanı kaydırır/ölçeklendirir/döndürür. İşaretçinin kendisi hareket etmez.
- Çok parmaklı hareket: Serbest biçimli hareket.
Avuç içi reddi
Android 13'ten itibaren sistem, yerleşik çerçeve etkinleştirildiğinde avuç içinden gelen girişleri otomatik olarak reddedebilir. Şirket içinde özel olarak geliştirilen çözümler hâlâ desteklenmektedir ancak avuç içi algılandığında TOOL_TYPE_PALM işaretini döndürecek şekilde değiştirilmeleri gerekebilir. Yerleşik çerçeve, özel çözümlerle de birlikte çalışır.
Gerçek model, hareket verilerinin ilk 90 milisaniyesine, mevcut işaretçiye ve çevreleyen işaretçilere bakar, ardından dokunmaların ekran kenarından ne kadar uzakta olduğunu değerlendirir.
Ardından, her bir işaretçi için hangi işaretçilerin avuç içi olduğunu belirler. Ayrıca touchMajor ve touchMinor tarafından bildirilen her bir temasın boyutunu da hesaba katar. 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önderildiyse sistem şunlardan birini yapar:
- (Başka etkin işaretçiler varsa)
ACTION_POINTER_UPveFLAG_CANCELEDayarlı işaretçiyi iptal eder. - (Tek işaretçi buysa)
ACTION_CANCELile işaretçiyi iptal eder.
MotionEvent.FLAG_CANCELED adlı herkese açık API, mevcut etkinliğin kullanıcı işlemini tetiklememesi gerektiğini belirtir. Bu işaret hem ACTION_CANCEL hem de ACTION_POINTER_UP için ayarlanır.
Avuç içi işaretçisi uygulamalara gönderilmediyse sistem işaretçiyi bırakır.
Avuç içi algılamayı etkinleştirme
- Dokunmatik sürücünüzde, aşağıdaki alanların çözünürlüklerini ayarlamak için
input_abs_set_resmakrosunu kullanın (birimler mm başına pikseldir):ABS_MT_POSITION_XABS_MT_POSITION_YABS_MT_TOUCH_MAJORABS_MT_TOUCH_MINOR
ABS_MT_TOUCH_MINORdesteği isteğe bağlıdır. Ancak cihazınız destekliyorsa çö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 - Ö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_serverişlemini yeniden başlatın.$ adb shell stop && adb shell startadb shell dumpsys input,UnwantedInteractionBlockeriçinde avuç içi reddediciler olduğunu gösterdiğini doğrulayın. Aksi takdirde, girişle ilgili günlükleri kontrol ederek yanlış yapılandırılmış olabilecek öğelerle ilgili ipuçları bulun.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**rcdosyanıza ilgili sysprop komutunu ekleyin:setprop persist.device_config.input_native_boot.palm_rejection_enabled 1