Android รองรับหน้าจอสัมผัสและแท็บเล็ตแบบสัมผัสที่หลากหลาย รวมถึงแท็บเล็ตที่ใช้ปากกาสไตลัส
หน้าจอสัมผัสเป็นอุปกรณ์ระบบสัมผัสที่เชื่อมโยงกับจอแสดงผล ผู้ใช้รู้สึกว่ามีการควบคุมรายการบนหน้าจอโดยตรง
ทัชแพดคืออุปกรณ์ระบบสัมผัสที่ไม่เกี่ยวข้องกับจอแสดงผล เช่น แท็บเล็ตดิจิทัล ทัชแพดมักใช้สำหรับการชี้หรือ การกำหนดตำแหน่งโดยอ้อมแบบสัมบูรณ์หรือการควบคุมด้วยท่าทางสัมผัสของอินเทอร์เฟซผู้ใช้
อุปกรณ์แบบสัมผัสอาจมีปุ่มที่มีฟังก์ชันการทำงานคล้ายกับปุ่มเมาส์
บางครั้งอุปกรณ์ระบบสัมผัสสามารถดัดแปลงได้โดยใช้เครื่องมือต่างๆ เช่น นิ้วหรือสไตลัส ขึ้นอยู่กับเทคโนโลยีเซ็นเซอร์การแตะที่แฝงอยู่
บางครั้งอุปกรณ์ระบบสัมผัสก็ใช้เพื่อติดตั้งใช้งานปุ่มเสมือน ตัวอย่างเช่น บน สำหรับอุปกรณ์ Android บางรุ่น พื้นที่เซ็นเซอร์สำหรับหน้าจอสัมผัสจะขยายออกนอกขอบของ จอแสดงผลและใช้งานแบบ 2 ด้านโดยเป็นส่วนหนึ่งของแป้นกดร่วมที่ไวต่อการสัมผัส
เนื่องจากอุปกรณ์แบบสัมผัสมีหลากหลายมาก Android จึงใช้พร็อพเพอร์ตี้การกําหนดค่าจํานวนมากเพื่ออธิบายลักษณะและลักษณะการทํางานที่ต้องการของอุปกรณ์แต่ละเครื่อง
การแยกประเภทอุปกรณ์ระบบสัมผัส
อุปกรณ์อินพุตจัดว่าเป็นอุปกรณ์มัลติทัชหากทั้ง 2 อย่าง ตามเงื่อนไขต่อไปนี้
- อุปกรณ์อินพุตจะรายงานการมีอยู่ของแกนสัมบูรณ์
ABS_MT_POSITION_X
และABS_MT_POSITION_Y
- อุปกรณ์อินพุตไม่มีปุ่มเกมแพด เงื่อนไขนี้ แก้ความกำกวมด้วยเกมแพดบางตัวที่รายงานแกนที่มีโค้ด ที่ทับซ้อนกับแกน MT
อุปกรณ์อินพุตจัดว่าเป็นอุปกรณ์แตะครั้งเดียว ถ้าอุปกรณ์ทั้ง 2 ตัว ระงับเงื่อนไขต่อไปนี้:
- อุปกรณ์อินพุตไม่ได้จัดว่าเป็นอุปกรณ์แบบมัลติทัช อุปกรณ์อินพุต จัดว่าเป็นอุปกรณ์แบบแตะครั้งเดียวหรือมัลติทัช ห้ามใช้ทั้งคู่
- อุปกรณ์อินพุตรายงานว่ามี
ABS_X
และABS_Y
สัมบูรณ์ แกน และโค้ดคีย์BTN_TOUCH
เมื่ออุปกรณ์อินพุตได้รับการจัดประเภทเป็นอุปกรณ์แบบสัมผัส ระบบจะพิจารณาว่ามีแป้นพิมพ์เสมือนหรือไม่โดยพยายามโหลดไฟล์การแมปแป้นพิมพ์เสมือนสำหรับอุปกรณ์ หากมีแผนที่แป้นเสมือน ระบบจะโหลดไฟล์เลย์เอาต์แป้นสำหรับอุปกรณ์ด้วย โปรดดูข้อมูลเกี่ยวกับตำแหน่งและรูปแบบของไฟล์เหล่านี้ที่หัวข้อ [ไฟล์แผนที่คีย์เสมือน](#virtual-key-map-files)
ถัดไป ระบบจะโหลดไฟล์การกำหนดค่าอุปกรณ์อินพุตสำหรับอุปกรณ์ระบบสัมผัส
อุปกรณ์สัมผัสในตัวทั้งหมดควรมีไฟล์การกำหนดค่าอุปกรณ์อินพุต หากไม่มีไฟล์การกําหนดค่าอุปกรณ์อินพุต ระบบจะเลือกการกําหนดค่าเริ่มต้นที่เหมาะสมสําหรับอุปกรณ์ต่อพ่วงแบบสัมผัสอเนกประสงค์ เช่น หน้าจอสัมผัส HID ภายนอกแบบ USB หรือบลูทูธ หรือแท็บเล็ตสัมผัส ค่าเริ่มต้นเหล่านี้ไม่ได้ออกแบบมาสำหรับหน้าจอแบบสัมผัสในตัวและ อาจทำให้เกิดลักษณะการทำงานที่ไม่ถูกต้อง
หลังจากโหลดการกำหนดค่าอุปกรณ์อินพุตแล้ว ระบบจะจัดประเภทอุปกรณ์อินพุตเป็นอุปกรณ์หน้าจอสัมผัส ทัชแพด หรือพอยน์เตอร์
- อุปกรณ์หน้าจอสัมผัสใช้สำหรับการควบคุมวัตถุต่างๆ บนอุปกรณ์ บนหน้าจอ ผู้ใช้แตะที่หน้าจอโดยตรง ระบบจึงไม่ และจำเป็นต้องมีพื้นที่เพิ่มเติมเพื่อระบุวัตถุที่ถูก ถูกปรับแต่ง
- อุปกรณ์ทัชแพดใช้เพื่อระบุข้อมูลตำแหน่งสัมบูรณ์ให้กับแอปเกี่ยวกับการสัมผัสในบริเวณเซ็นเซอร์หนึ่งๆ มีประโยชน์ สำหรับแท็บเล็ตดิจิทัล
- อุปกรณ์ชี้ใช้สำหรับควบคุมออบเจ็กต์โดยอ้อมบน โดยใช้เคอร์เซอร์ ระบบจะตีความนิ้วเป็นท่าทางสัมผัสแบบใช้หลายนิ้ว ส่วนเครื่องมืออื่นๆ เช่น สไตลัส จะตีความโดยใช้ตำแหน่งสัมบูรณ์ โปรดดู ตัวชี้แบบมัลติทัชโดยอ้อม เพื่อดูข้อมูลเพิ่มเติม
ระบบใช้กฎต่อไปนี้เพื่อจัดประเภทอุปกรณ์อินพุตเป็นหน้าจอสัมผัส ทัชแพด หรืออุปกรณ์ชี้ตำแหน่ง
- หากตั้งค่าพร็อพเพอร์ตี้
touch.deviceType
ไว้ ประเภทอุปกรณ์จะเป็น ตั้งค่าตามที่ระบุ - หากอุปกรณ์อินพุตรายงานว่ามีพร็อพเพอร์ตี้อินพุต
INPUT_PROP_DIRECT
(ผ่านEVIOCGPROP
ioctl) ระบบจะตั้งค่าประเภทอุปกรณ์เป็นหน้าจอสัมผัส เงื่อนไขนี้จะถือว่าการแตะอินพุตโดยตรง จะติดอยู่กับจอแสดงผลที่เชื่อมต่อด้วย - หากอุปกรณ์อินพุตรายงานว่ามี
INPUT_PROP_POINTER
คุณสมบัติอินพุต (ผ่านEVIOCGPROP
ioctl) จากนั้นประเภทอุปกรณ์ ตั้งค่าเป็น pointer - หากอุปกรณ์อินพุตรายงานว่ามีแกนสัมพัทธ์
REL_X
หรือREL_Y
ระบบจะตั้งค่าประเภทอุปกรณ์เป็นแท็บเล็ตสัมผัส เงื่อนไขนี้จะแก้ไขความคลุมเครือสําหรับอุปกรณ์อินพุตที่มีทั้งเมาส์และแป้นสัมผัส ในกรณีนี้ จะไม่มีการใช้ทัชแพดเพื่อควบคุม เนื่องจากเมาส์เป็นตัวควบคุมอยู่แล้ว - มิเช่นนั้น ระบบจะตั้งค่าประเภทอุปกรณ์เป็น pointer ซึ่งค่าเริ่มต้นนี้จะช่วยให้มั่นใจว่า ทัชแพดที่ไม่ได้ระบุวัตถุประสงค์พิเศษอื่นใดไว้ ควบคุมเคอร์เซอร์
ปุ่ม
ปุ่มเป็นการควบคุมที่ไม่บังคับซึ่งแอปสามารถใช้เพื่อดำเนินการฟังก์ชันเพิ่มเติม ปุ่มบนอุปกรณ์แบบสัมผัสจะทำงานคล้ายกับเมาส์ และมักจะใช้กับอุปกรณ์แบบสัมผัสตัวชี้หรือกับ สไตลัส
รองรับปุ่มต่อไปนี้
BTN_LEFT
: แมปกับMotionEvent.BUTTON_PRIMARY
แล้วBTN_RIGHT
: แมปกับMotionEvent.BUTTON_SECONDARY
แล้วBTN_MIDDLE
: แมปกับMotionEvent.BUTTON_MIDDLE
BTN_BACK
และBTN_SIDE
: จับคู่กับMotionEvent.BUTTON_BACK
การกดปุ่มนี้จะสังเคราะห์การกดแป้นด้วยรหัสแป้นKeyEvent.KEYCODE_BACK
ด้วยBTN_FORWARD
และBTN_EXTRA
: แมปกับMotionEvent.BUTTON_FORWARD
การกดปุ่มนี้จะสังเคราะห์การกดแป้นด้วยรหัสคีย์KeyEvent.KEYCODE_FORWARD
ด้วยBTN_STYLUS
: แมปกับMotionEvent.BUTTON_SECONDARY
แล้วBTN_STYLUS2
: แมปกับMotionEvent.BUTTON_TERTIARY
เครื่องมือและประเภทเครื่องมือ
เครื่องมือคือนิ้ว สไตลัส หรืออุปกรณ์อื่นๆ ที่ใช้ในการโต้ตอบกับ อุปกรณ์ระบบสัมผัส อุปกรณ์ระบบสัมผัสบางประเภทสามารถแยกความแตกต่างระหว่าง และเครื่องมือประเภทต่างๆ
ในส่วนอื่นๆ ของ Android เช่น MotionEvent
API เครื่องมือมักจะมีการอ้างอิง
เป็นตัวชี้
ประเภทเครื่องมือที่ได้รับการสนับสนุนมีดังนี้
BTN_TOOL_FINGER
และMT_TOOL_FINGER
: จับคู่กับMotionEvent.TOOL_TYPE_FINGER
BTN_TOOL_PEN
และMT_TOOL_PEN
: จับคู่กับMotionEvent.TOOL_TYPE_STYLUS
BTN_TOOL_RUBBER
: แมปกับMotionEvent.TOOL_TYPE_ERASER
แล้วBTN_TOOL_BRUSH
: แมปกับMotionEvent.TOOL_TYPE_STYLUS
BTN_TOOL_PENCIL
: แมปกับMotionEvent.TOOL_TYPE_STYLUS
แล้วBTN_TOOL_AIRBRUSH
: แมปกับMotionEvent.TOOL_TYPE_STYLUS
BTN_TOOL_MOUSE
: แมปกับMotionEvent.TOOL_TYPE_MOUSE
BTN_TOOL_LENS
: แมปกับMotionEvent.TOOL_TYPE_MOUSE
BTN_TOOL_DOUBLETAP
,BTN_TOOL_TRIPLETAP
และBTN_TOOL_QUADTAP
: แมปกับMotionEvent.TOOL_TYPE_FINGER
เครื่องมือสำหรับการวางเมาส์เหนือรายการเทียบกับเครื่องมือสำหรับการแตะ
เครื่องมืออาจสัมผัสกับอุปกรณ์แบบสัมผัสหรืออยู่ในระยะสัญญาณและวางอยู่เหนืออุปกรณ์ก็ได้ อุปกรณ์แบบสัมผัสบางรุ่นไม่สามารถตรวจหาเครื่องมือที่วางอยู่เหนืออุปกรณ์ได้ เครื่องมือที่ตรวจจับได้ เช่น เครื่องมือแปลงข้อมูลแบบสไตลัสที่ใช้คลื่นความถี่วิทยุ (RF) มักตรวจจับได้เมื่อเครื่องมืออยู่ในช่วงระยะจำกัดของเครื่องมือแปลงข้อมูล
คอมโพเนนต์ InputReader
จะแยกความแตกต่างระหว่างเครื่องมือแตะออกจากการวางเมาส์เหนือ
และเครื่องมือการประมาณที่กำหนดได้เอง ในทำนองเดียวกัน เครื่องมือที่แตะและเครื่องมือที่ใช้วางเมาส์จะรายงานไปยังแอป
ด้วยวิธีที่หลากหลาย
เครื่องมือการแตะจะรายงานไปยังแอปว่าเป็นกิจกรรมการแตะ
กำลังใช้ MotionEvent.ACTION_DOWN
, MotionEvent.ACTION_MOVE
MotionEvent.ACTION_DOWN
,
MotionEvent.ACTION_POINTER_DOWN
และ MotionEvent.ACTION_POINTER_UP
ระบบจะรายงานเครื่องมือการวางเมาส์เหนือแอปเป็นเหตุการณ์การเคลื่อนไหวทั่วไปโดยใช้ MotionEvent.ACTION_HOVER_ENTER
, MotionEvent.ACTION_HOVER_MOVE
และ MotionEvent.ACTION_HOVER_EXIT
ข้อกำหนดของไดรเวอร์อุปกรณ์ระบบสัมผัส
- ไดรเวอร์อุปกรณ์สัมผัสควรลงทะเบียนเฉพาะแกนและรหัสคีย์สำหรับแกนและปุ่มที่รองรับ การลงทะเบียนแกนหรือรหัสคีย์ที่ไม่รองรับ
อาจทำให้อัลกอริทึมการจัดประเภทอุปกรณ์สับสนหรือทำให้ระบบไม่ถูกต้อง
ตรวจจับความสามารถของอุปกรณ์ เช่น หากอุปกรณ์รายงานรหัสแป้น
BTN_TOUCH
ระบบจะถือว่ามีการใช้BTN_TOUCH
เสมอเพื่อระบุว่าเครื่องมือสัมผัสหน้าจออยู่หรือไม่ ดังนั้นจึงไม่ควรใช้BTN_TOUCH
เพื่อระบุ เครื่องมือจะอยู่เพียงในช่วงและวางเหนือได้ - อุปกรณ์แบบสัมผัสเดียวใช้เหตุการณ์อินพุต Linux ต่อไปนี้
ABS_X
: (ต้องระบุ) รายงานพิกัด X ของเครื่องมือABS_Y
: (ต้องระบุ) รายงานพิกัด Y ของเครื่องมือABS_PRESSURE
: (ไม่บังคับ) รายงานความกดดันทางกายภาพที่มีต่อเคล็ดลับ ของเครื่องมือหรือความแรงของสัญญาณการสัมผัสกับการสัมผัสABS_TOOL_WIDTH
: (ไม่บังคับ) รายงานพื้นที่ตัดขวางหรือความกว้างของ การสัมผัสที่สัมผัสหรือของเครื่องมือโดยตรงABS_DISTANCE
: (ไม่บังคับ) รายงานระยะห่างของเครื่องมือจากพื้นผิวของอุปกรณ์สัมผัสABS_TILT_X
: (ไม่บังคับ) รายงานการเอียงของเครื่องมือจากพื้นผิวของอุปกรณ์สัมผัสตามแนวแกน XABS_TILT_Y
: (ไม่บังคับ) รายงานการเอียงของเครื่องมือจากพื้นผิวของอุปกรณ์สัมผัสตามแกน YBTN_TOUCH
: (ต้องระบุ) ระบุว่าเครื่องมือสัมผัสอุปกรณ์อยู่หรือไม่BTN_LEFT
BTN_RIGHT
BTN_MIDDLE
BTN_BACK
BTN_SIDE
BTN_FORWARD
BTN_EXTRA
,BTN_STYLUS
,BTN_STYLUS2
(ไม่บังคับ) ปุ่มปุ่ม รายงาน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
: (ไม่บังคับ) รายงานประเภทเครื่องมือ
- อุปกรณ์แบบมัลติทัชใช้เหตุการณ์การป้อนข้อมูลของ Linux ดังต่อไปนี้
ABS_MT_POSITION_X
: (ต้องระบุ) รายงานพิกัด X ของเครื่องมือABS_MT_POSITION_Y
: (ต้องระบุ) รายงานพิกัด Y ของเครื่องมือABS_MT_PRESSURE
: (ไม่บังคับ) รายงานแรงกดที่ปลายเครื่องมือหรือความแรงของสัญญาณการสัมผัสABS_MT_TOUCH_MAJOR
: (ไม่บังคับ) รายงานพื้นที่หน้าตัดของจุดสัมผัส หรือความยาวของมิติข้อมูลที่ยาวกว่าของจุดสัมผัสABS_MT_TOUCH_MINOR
: (ไม่บังคับ) รายงานความยาวของมิติข้อมูลที่สั้นกว่าของจุดสัมผัส ไม่ควรใช้แกนนี้หากABS_MT_TOUCH_MAJOR
คือ การรายงานการวัดพื้นที่ABS_MT_WIDTH_MAJOR
: (ไม่บังคับ) รายงานพื้นที่ตัดขวางของ ของตัวเครื่องมือเอง หรือความยาวของตัวเครื่องมือเอง อย่าใช้แกนนี้ เว้นแต่คุณจะทราบขนาดของเครื่องมือABS_MT_WIDTH_MINOR
: (ไม่บังคับ) รายงานความยาวของมิติข้อมูลที่สั้นกว่า ของตัวเครื่องมือเอง ไม่ควรใช้แกนนี้หากABS_MT_WIDTH_MAJOR
รายงานการวัดพื้นที่ หรือหากไม่ทราบขนาดของเครื่องมือABS_MT_ORIENTATION
: (ไม่บังคับ) รายงานการวางแนวของเครื่องมือABS_MT_DISTANCE
: (ไม่บังคับ) รายงานระยะห่างของเครื่องมือจากพื้นผิวของอุปกรณ์สัมผัสABS_MT_TOOL_TYPE
: (ไม่บังคับ) รายงานประเภทเครื่องมือเป็นMT_TOOL_FINGER
หรือMT_TOOL_PEN
ABS_MT_TRACKING_ID
: (ไม่บังคับ) รายงานรหัสติดตามของเครื่องมือ รหัสติดตามคือจำนวนเต็มที่ไม่เป็นลบที่กำหนดเองที่ใช้เพื่อระบุ และติดตามแต่ละเครื่องมือแยกกันได้เมื่อมีเครื่องมือทำงานอยู่หลายรายการ ตัวอย่างเช่น เมื่อนิ้วหลายนิ้วสัมผัสอุปกรณ์ แต่ละนิ้วควรได้รับการระบุ รหัสติดตาม ซึ่งจะใช้ตราบเท่าที่นิ้วยังสัมผัสกันอยู่ รหัสติดตาม สามารถใช้ซ้ำได้เมื่อเครื่องมือที่เกี่ยวข้องเลื่อนออกไปนอกระยะสัญญาณABS_MT_SLOT
: (ไม่บังคับ) รายงานรหัสช่องของเครื่องมือเมื่อใช้โปรโตคอลมัลติทัช "B" ของ Linux ดูรายละเอียดเพิ่มเติมในเอกสารประกอบเกี่ยวกับโปรโตคอลมัลติทัชของ LinuxBTN_TOUCH
: (ต้องระบุ) ระบุว่าเครื่องมือกำลังแตะ อุปกรณ์BTN_LEFT
BTN_RIGHT
BTN_MIDDLE
BTN_BACK
BTN_SIDE
BTN_FORWARD
BTN_EXTRA
,BTN_STYLUS
,BTN_STYLUS2
(ไม่บังคับ) ปุ่มปุ่ม รายงาน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
: (ไม่บังคับ) รายงานประเภทเครื่องมือ
- หากมีการกำหนดแกนสำหรับทั้งโปรโตคอลการแตะครั้งเดียวและโปรโตคอลมัลติทัช ให้ทำตามขั้นตอนต่อไปนี้ ใช้เฉพาะแกนมัลติทัชเท่านั้น และจะไม่สนใจแกนแบบมัลติทัช
ค่าต่ำสุดและสูงสุดของแกน
ABS_X
,ABS_Y
,ABS_MT_POSITION_X
และABS_MT_POSITION_Y
จะกำหนดขอบเขตของพื้นที่ที่ใช้งานอยู่ของอุปกรณ์ในหน่วยพื้นผิวเฉพาะอุปกรณ์ ในกรณีของหน้าจอสัมผัส พื้นที่ที่ใช้งาน อธิบายส่วนของอุปกรณ์ระบบสัมผัสที่บดบังจอแสดงผลสำหรับหน้าจอสัมผัส ระบบจะประมาณการสัมผัสที่รายงานโดยอัตโนมัติ วางตำแหน่งในหน่วยพื้นผิวเพื่อรับตำแหน่งการสัมผัสในพิกเซลที่แสดงตาม ในการคำนวณต่อไปนี้
displayX = (x - minX) * displayWidth / (maxX - minX + 1) displayY = (y - minY) * displayHeight / (maxY - minY + 1)
หน้าจอสัมผัสอาจรายงานการสัมผัสนอกพื้นที่ที่ใช้งานอยู่ซึ่งมีการรายงาน
ระบบจะไม่ส่งการสัมผัสที่เริ่มต้นนอกพื้นที่ทำงานไปยังแอป แต่สามารถใช้สำหรับการป้อนรหัสผ่านเสมือนได้
ระบบจะส่งการสัมผัสที่เริ่มต้นภายในพื้นที่ที่ทำงานอยู่ หรือที่เข้าสู่และออกจากพื้นที่แสดงผลไปยังแอป ดังนั้น หากการสัมผัสเริ่มต้นภายในขอบของแอปแล้วย้ายไปนอกพื้นที่ที่ใช้งานอยู่ แอปอาจได้รับเหตุการณ์การสัมผัสที่มีพิกัดการแสดงผลเป็นลบหรืออยู่นอกขอบเขตของการแสดงผล ซึ่งเป็นลักษณะการทำงานที่ควรจะเป็น
อุปกรณ์ระบบสัมผัสไม่ควรยึดพิกัดการแตะกับขอบเขตของอุปกรณ์สัมผัส ของคุณ หากการแตะออกจากพื้นที่ที่ใช้งาน ควรมีการรายงานว่าอยู่นอกพื้นที่ หรือไม่ควรรายงานบริเวณนั้นเลย
ตัวอย่างเช่น หากผู้ใช้แตะใกล้มุมบนซ้ายของ หน้าจอสัมผัส หน้าจออาจรายงานพิกัดของ (minX, minY) หากนิ้วลากต่อ เพื่อย้ายไปนอกพื้นที่ที่ใช้งาน หน้าจอสัมผัสควรเริ่ม พิกัดการรายงานที่มีคอมโพเนนต์น้อยกว่า minX และ minY เช่น (minX - 2, minY - 3) มิเช่นนั้นระบบควรหยุดการรายงานการแตะทั้งหมด กล่าวคือ หน้าจอสัมผัสไม่ควรรายงาน (minX, minY) เมื่อนิ้วของผู้ใช้สัมผัสนอกพื้นที่ที่ใช้งานอยู่
การจำกัดพิกัดการสัมผัสไว้ที่ขอบของจอแสดงผลจะสร้างขอบเขตที่แข็งแบบเทียมรอบขอบของหน้าจอ ซึ่งทำให้ระบบติดตามการเคลื่อนไหวที่เข้าสู่หรือออกจากขอบเขตของพื้นที่แสดงผลได้อย่างราบรื่น
ค่าที่
ABS_PRESSURE
หรือABS_MT_PRESSURE
รายงาน หาก จะได้รับการรายงานเลย และต้องไม่ใช่ 0 เมื่อเครื่องมือสัมผัสกับอุปกรณ์ และเลข 0 เป็นเลข 0 เพื่อระบุว่าเครื่องมือนั้นวางอยู่ข้อมูลความกดดันในการรายงานเป็นไม่บังคับแต่ขอแนะนําอย่างยิ่ง แอปสามารถใช้ข้อมูลแรงกดเพื่อใช้การวาดภาพที่ไวต่อแรงกด และเอฟเฟกต์อื่นๆ
ค่าที่รายงานโดย
ABS_TOOL_WIDTH
,ABS_MT_TOUCH_MAJOR
,ABS_MT_TOUCH_MINOR
,ABS_MT_WIDTH_MAJOR
หรือABS_MT_WIDTH_MINOR
ไม่ควรเป็น 0 เมื่อเครื่องมือสัมผัสกับอุปกรณ์ และต้องเป็น 0 ในกรณีอื่นๆ แต่ไม่จำเป็นต้องเป็นเช่นนั้น เช่น อุปกรณ์สัมผัสอาจวัดขนาดของจุดสัมผัสจากการสัมผัสด้วยนิ้วได้ แต่ไม่วัดจุดสัมผัสจากการสัมผัสด้วยปากกาสไตลัสได้ข้อมูลขนาดในการรายงานเป็นสิ่งที่ไม่บังคับ แต่ขอแนะนำอย่างยิ่ง แอปสามารถใช้ข้อมูลแรงกดเพื่อใช้การวาดภาพที่คำนึงถึงขนาด และเอฟเฟกต์อื่นๆ
ค่าที่
ABS_DISTANCE
หรือABS_MT_DISTANCE
รายงานควรมีค่าใกล้เคียงกับ 0 เมื่อเครื่องมือสัมผัสกับอุปกรณ์ ระยะทางอาจไม่เท่ากับ 0 แม้ว่าเครื่องมือจะสัมผัสโดยตรงก็ตาม ค่าที่แน่นอนที่รายงานจะขึ้นอยู่กับลักษณะที่ฮาร์ดแวร์วัดระยะทางการรายงานข้อมูลระยะทางเป็นตัวเลือกที่ไม่บังคับ แต่เราขอแนะนำให้ใช้กับอุปกรณ์ที่มีปากกาสไตลัส
ค่าที่
ABS_TILT_X
และABS_TILT_Y
รายงานควรเป็น 0 เมื่อเครื่องมือตั้งฉากกับอุปกรณ์ การเอียงที่ไม่ใช่ 0 บ่งบอกว่าเครื่องมือถืออยู่ในลักษณะเอียงให้ถือว่ามุมเอียงตามแกน X และ Y เป็นค่าองศา จากตั้งฉาก จุดศูนย์กลาง (ตั้งฉากกันพอดี) ได้จาก
(max + min) / 2
สำหรับแต่ละแกน ค่าน้อยกว่าจุดศูนย์กลาง แสดงการเอียงขึ้นหรือไปทางซ้าย ค่าที่มากกว่าจุดศูนย์กลาง หมายถึงการเอียงลงหรือไปทางขวาInputReader
จะแปลงองค์ประกอบการเอียง X และ Y เป็นมุมเอียงตั้งฉากตั้งแต่ 0 ถึงPI / 2
เรเดียนและมุมการวางแนวของระนาบตั้งแต่-PI
ถึงPI
เรเดียน การนําเสนอนี้ส่งผลให้มีคำอธิบายการวางแนวที่เข้ากันได้กับสิ่งที่ใช้อธิบายการแตะด้วยนิ้วการรายงานข้อมูลการเอียงเป็นไม่บังคับ แต่แนะนำให้ใช้สำหรับอุปกรณ์สไตลัส
หาก
ABS_MT_TOOL_TYPE
รายงานประเภทเครื่องมือ ข้อมูลประเภทเครื่องมือที่BTN_TOOL_*
รายงานจะถือว่าไม่มีผล หากไม่มีข้อมูลประเภทเครื่องมือเลย ประเภทเครื่องมือจะเป็นMotionEvent.TOOL_TYPE_FINGER
โดยค่าเริ่มต้นระบบจะพิจารณาว่าเครื่องมือใดใช้งานอยู่โดยอิงตามเงื่อนไขต่อไปนี้
เมื่อใช้โปรโตคอลการแตะครั้งเดียว เครื่องมือจะทำงานหาก
BTN_TOUCH
หรือBTN_TOOL_*
เท่ากับ 1เงื่อนไขนี้หมายความว่า
InputReader
ต้องมีข้อมูลบางอย่างเกี่ยวกับลักษณะของเครื่องมือเป็นอย่างน้อย ไม่ว่าจะเป็นการสัมผัสหรือไม่ หรืออย่างน้อยก็ประเภทของเครื่องมือ หากไม่มีข้อมูล เครื่องมือนี้จะถือว่าไม่ได้ใช้งาน (อยู่นอกช่วง)- เมื่อใช้โปรโตคอลมัลติทัช "A" เครื่องมือจะทำงานเมื่อ จะปรากฏในรายงานการซิงค์ฉบับล่าสุด เมื่อเครื่องมือหยุดปรากฏในรายงานการซิงค์ แสดงว่าเครื่องมือนั้นไม่มีอยู่อีกต่อไป
- เมื่อใช้โปรโตคอลมัลติทัช "B" เครื่องมือจะทำงานตราบใดที่มีช่องที่ใช้งานอยู่ เมื่อล้างข้อมูลในช่องแล้ว เครื่องมือดังกล่าวจะหยุดทำงาน
- ระบบจะพิจารณาว่าเครื่องมือกำลังวางเมาส์เหนืออยู่ตามเงื่อนไขต่อไปนี้
- หากเครื่องมือคือ
BTN_TOOL_MOUSE
หรือBTN_TOOL_LENS
เครื่องมือ ไม่วางเมาส์เหนือเงื่อนไขใดๆ แม้ว่าเงื่อนไขหนึ่งดังต่อไปนี้จะเป็นจริงก็ตาม - หากเครื่องมือทำงานอยู่และไดร์เวอร์รายงานข้อมูลความดัน และความดันที่รายงานเป็น 0 แสดงว่าเครื่องมือกำลังโฮเวอร์อยู่
- หากเครื่องมือทำงานอยู่และไดรเวอร์รองรับรหัสคีย์
BTN_TOUCH
และBTN_TOUCH
มีค่าเป็น 0 เครื่องมือจะวางเหนือค่า
- หากเครื่องมือคือ
InputReader
รองรับทั้งโปรโตคอลมัลติทัช "A" และ "B" ไดร์เวอร์ใหม่ควรใช้โปรโตคอล "B" แต่จะใช้โปรโตคอลใดก็ได้ตั้งแต่ Android 4.0 คุณอาจต้องเปลี่ยนไดรเวอร์หน้าจอสัมผัสเพื่อให้เป็นไปตามข้อกำหนดโปรโตคอลอินพุตของ Linux
คุณอาจต้องทำการเปลี่ยนแปลงต่อไปนี้
เมื่อเครื่องมือไม่มีการใช้งาน (นิ้ว "ยกขึ้น") เครื่องมือนั้นควรหยุดปรากฏในรายงานการซิงค์แบบหลายนิ้วในภายหลัง เมื่อเครื่องมือทั้งหมดไม่ทำงาน (นิ้วทั้งหมดเลื่อนไป "ขึ้น") ไดรเวอร์ควรส่งแพ็กเก็ตรายงานการซิงค์ที่ว่างเปล่า เช่น
SYN_MT_REPORT
ตามด้วยSYN_REPORT
Android เวอร์ชันก่อนหน้าคาดหวังว่าจะมีการรายงานเหตุการณ์ "ขึ้น" โดยส่งค่าแรงดันเป็น 0 ลักษณะการทำงานแบบเก่าเข้ากันไม่ได้กับข้อกำหนดจำเพาะของโปรโตคอลอินพุต Linux และระบบไม่รองรับอีกต่อไป
ควรรายงานข้อมูลความดันทางกายภาพหรือความแรงของสัญญาณโดยใช้
ABS_MT_PRESSURE
ข้อมูลความกดดันที่ Android ดึงมาเวอร์ชันก่อนหน้า จาก
ABS_MT_TOUCH_MAJOR
ลักษณะการทำงานแบบเก่าเข้ากันไม่ได้กับข้อกำหนดจำเพาะของโปรโตคอลอินพุต Linux และระบบไม่รองรับอีกต่อไป- ควรรายงานข้อมูลขนาดการสัมผัสโดยใช้
ABS_MT_TOUCH_MAJOR
Android เวอร์ชันก่อนหน้าจะดึงข้อมูลขนาดจาก
ABS_MT_TOOL_MAJOR
ลักษณะการทำงานเดิมไม่สามารถใช้ร่วมกับ ระบบไม่รองรับข้อกำหนดโปรโตคอลอินพุตของ Linux อีกต่อไป
การดำเนินการของอุปกรณ์ระบบสัมผัส
ต่อไปนี้เป็นสรุปคร่าวๆ เกี่ยวกับการทำงานของอุปกรณ์ระบบสัมผัสใน Android
EventHub
อ่านเหตุการณ์ดิบจากไดรเวอร์evdev
InputReader
จะใช้เหตุการณ์ดิบและอัปเดตสถานะภายในเกี่ยวกับ ตำแหน่งและลักษณะอื่นๆ ของแต่ละเครื่องมือ และยังติดตามสถานะปุ่มด้วย- หากมีการกดหรือปล่อยปุ่ม BACK หรือ FORWARD
InputReader
จะแจ้งInputDispatcher
เกี่ยวกับเหตุการณ์สําคัญ InputReader
จะระบุว่ามีการกดแป้นเสมือนหรือไม่ หากใช่ ระบบจะแจ้งให้InputDispatcher
ทราบเกี่ยวกับเหตุการณ์สำคัญInputReader
กำหนดว่าการแตะเริ่มต้นขึ้นภายใน ขอบเขตของการแสดงผล หากใช่ ระบบจะแจ้งให้InputDispatcher
ทราบเกี่ยวกับ เหตุการณ์การแตะ- หากไม่มีเครื่องมือแตะ แต่มีเครื่องมือวางเหนือเครื่องมืออย่างน้อย 1 อย่าง
InputReader
จะแจ้งเตือนInputDispatcher
เกี่ยวกับเหตุการณ์เมื่อวางเมาส์ - หากประเภทอุปกรณ์ระบบสัมผัสคือตัวชี้
InputReader
จะทำตัวชี้ การตรวจจับท่าทางสัมผัส ย้ายตัวชี้และจุดให้สอดคล้องกัน และแจ้งInputDispatcher
เกี่ยวกับเหตุการณ์ตัวชี้ InputDispatcher
ใช้WindowManagerPolicy
เพื่อระบุว่า เหตุการณ์ที่ควรถูกส่งออกไปแล้วและควรปลุกระบบอุปกรณ์หรือไม่ จากนั้นInputDispatcher
จะส่งเหตุการณ์ไปยังแอปที่เหมาะสม
การกำหนดค่าอุปกรณ์ระบบสัมผัส
พฤติกรรมของอุปกรณ์ระบบสัมผัสจะพิจารณาจากแกน ปุ่ม คุณสมบัติการป้อนข้อมูล การกำหนดค่าอุปกรณ์อินพุต คีย์แมปเสมือน และรูปแบบคีย์
ดูรายละเอียดเพิ่มเติมเกี่ยวกับไฟล์ที่มีส่วนร่วมในการกําหนดค่าแป้นพิมพ์ได้ในส่วนต่อไปนี้
คุณสมบัติ
ระบบใช้พร็อพเพอร์ตี้การกําหนดค่าอุปกรณ์อินพุตหลายรายการในการกําหนดค่าและปรับเทียบลักษณะการทํางานของอุปกรณ์สัมผัส
สาเหตุหนึ่งที่ทำให้อุปกรณ์เป็นแบบสัมผัสมักจะรายงาน ลักษณะของการแตะโดยใช้หน่วยเฉพาะอุปกรณ์
เช่น อุปกรณ์ระบบสัมผัสหลายประเภทจะวัดพื้นที่การสัมผัส โดยใช้สเกลเฉพาะอุปกรณ์ภายใน เช่น จำนวนรวมของข้อผิดพลาด โหนดเซ็นเซอร์ที่ทริกเกอร์ด้วยการแตะ ค่าขนาดดิบนี้จะไม่มีความหมายสําหรับแอป เนื่องจากแอปจะต้องทราบเกี่ยวกับขนาดจริงและลักษณะอื่นๆ ของโหนดเซ็นเซอร์ของอุปกรณ์สัมผัส
ระบบใช้พารามิเตอร์การปรับเทียบที่เข้ารหัสไว้ในไฟล์การกำหนดค่าอุปกรณ์อินพุตเพื่อถอดรหัส เปลี่ยนรูปแบบ และทำให้ค่าที่อุปกรณ์สัมผัสรายงานเป็นค่ามาตรฐานที่ง่ายขึ้นซึ่งแอปเข้าใจได้
รูปแบบเอกสารประกอบ
เราใช้รูปแบบต่อไปนี้เพื่ออธิบายค่าที่ระบบใช้ในระหว่างกระบวนการปรับเทียบเพื่อวัตถุประสงค์ด้านเอกสารประกอบ
ค่าแกนดิบ
นิพจน์ต่อไปนี้แสดงค่าดิบซึ่งรายงานโดยไดรเวอร์อุปกรณ์สัมผัสเป็นเหตุการณ์ EV_ABS
raw.x
- ค่าของแกน
ABS_X
หรือแกนABS_MT_POSITION_X
raw.y
- ค่าของแกน
ABS_Y
หรือแกนABS_MT_POSITION_Y
raw.pressure
- ค่าของแกน
ABS_PRESSURE
หรือABS_MT_PRESSURE
หรือ 0 หาก ไม่พร้อมใช้งาน raw.touchMajor
- ค่าของแกน
ABS_MT_TOUCH_MAJOR
หรือ 0 หากไม่มี raw.touchMinor
- ค่าของแกน
ABS_MT_TOUCH_MINOR
หรือraw.touchMajor
หากไม่มี raw.toolMajor
- ค่าของแกน
ABS_TOOL_WIDTH
หรือABS_MT_WIDTH_MAJOR
หรือ 0 หาก ไม่พร้อมใช้งาน raw.toolMinor
- ค่าของแกน
ABS_MT_WIDTH_MINOR
หรือraw.toolMajor
หากไม่ใช่ พร้อมใช้งาน raw.orientation
- ค่าของแกน
ABS_MT_ORIENTATION
หรือ 0 หากไม่มี raw.distance
- ค่าของแกน
ABS_DISTANCE
หรือABS_MT_DISTANCE
หรือ 0 หากไม่มี raw.tiltX
- ค่าของแกน
ABS_TILT_X
หรือ 0 หากไม่มี raw.tiltY
- ค่าของแกน
ABS_TILT_Y
หรือ 0 หากไม่มี
ช่วงแกนดิบ
นิพจน์ต่อไปนี้แสดงขอบเขตของค่าดิบ โดยรับค่าเหล่านี้ได้ด้วยการเรียกใช้ EVIOCGABS
ioctl สำหรับแต่ละแกน
raw.*.min
- ค่าต่ำสุดแบบรวมของแกนข้อมูลดิบ
raw.*.max
- ค่าสูงสุดแบบรวมของแกนข้อมูลดิบ
raw.*.range
- เทียบเท่ากับ
raw.*.max - raw.*.min
raw.*.fuzz
- ความแม่นยำของแกนดิบ เช่น fuzz = 1 ค่าเป็นนัยถูกต้องถึง +/- 1 หน่วย
raw.width
- ความกว้างรวมของพื้นที่สัมผัส ซึ่งเท่ากับ
raw.x.range + 1
raw.height
- ความสูงที่รวมพื้นที่รองรับการสัมผัส ซึ่งเท่ากับ
raw.y.range + 1
ช่วงเอาต์พุต
นิพจน์ต่อไปนี้แสดงลักษณะของระบบพิกัดเอาต์พุต ระบบจะใช้การประมาณค่าในช่วงเชิงเส้นเพื่อแปลข้อมูลตำแหน่งการแตะจาก หน่วยพื้นผิวที่อุปกรณ์แบบสัมผัสใช้ลงในหน่วยเอาต์พุตที่ รายงานไปยังแอป เช่น พิกเซลการแสดงผล
output.width
- ความกว้างของเอาต์พุต สำหรับหน้าจอสัมผัส (ที่เชื่อมโยงกับจอแสดงผล) ค่านี้คือความกว้างของการแสดงผลเป็นพิกเซล สำหรับทัชแพด (ไม่เชื่อมโยงกับจอแสดงผล)
ความกว้างของเอาต์พุตเท่ากับ
raw.width
ซึ่งหมายความว่าไม่มีการประมาณค่าในช่วง ไหม output.height
- ความสูงของเอาต์พุต สำหรับหน้าจอสัมผัส (เชื่อมโยงกับจอแสดงผล) ค่านี้คือความสูงของจอแสดงผลเป็นพิกเซล สำหรับแท็บเล็ต (ไม่ได้เชื่อมโยงกับจอแสดงผล) ความสูงของเอาต์พุตจะเท่ากับ
raw.height
ซึ่งบ่งบอกว่าไม่มีการปัดเศษ output.diag
- ความยาวเส้นทแยงมุมของระบบพิกัดเอาต์พุต ซึ่งเท่ากับ
sqrt(output.width ^2 + output.height ^2)
การกำหนดค่าพื้นฐาน
ตัวแมปอินพุตแบบสัมผัสใช้พร็อพเพอร์ตี้การกําหนดค่าหลายรายการในไฟล์การกําหนดค่าอุปกรณ์อินพุตเพื่อระบุค่าการปรับเทียบ ตารางต่อไปนี้อธิบายพร็อพเพอร์ตี้การกําหนดค่าสําหรับวัตถุประสงค์ทั่วไป มีการอธิบายคุณสมบัติอื่นๆ ทั้งหมด ในส่วนต่อไปนี้พร้อมกับฟิลด์ที่ใช้ในการปรับเทียบ
touch.deviceType
คําจํากัดความ: touch.deviceType
= touchScreen
|
touchPad
| pointer
| default
ระบุประเภทอุปกรณ์ระบบสัมผัส
-
หากค่าคือ
touchScreen
แสดงว่าอุปกรณ์สัมผัสเป็นหน้าจอสัมผัสที่เชื่อมโยงกับจอแสดงผล -
หากค่าคือ
touchPad
แสดงว่าอุปกรณ์สัมผัสคือทัชแพดที่ไม่ได้เชื่อมโยงกับจอแสดงผล -
หากค่าเป็น
pointer
แสดงว่าอุปกรณ์ระบบสัมผัสเป็นทัชแพดที่ไม่มีการเชื่อมโยง และการเคลื่อนไหวของจอแสดงผลจะใช้เพื่อ ท่าทางสัมผัสของตัวชี้แบบมัลติทัชโดยอ้อม -
หากค่าเป็น
default
ระบบจะตรวจหาประเภทอุปกรณ์โดยอัตโนมัติ ตามอัลกอริทึมการจัดประเภท
ดูรายละเอียดเพิ่มเติมเกี่ยวกับวิธีที่ประเภทอุปกรณ์ส่งผลต่อลักษณะการทํางานของอุปกรณ์สัมผัสได้ที่ส่วนการจัดประเภท
ใน Android 3 และต่ำกว่า ระบบจะถือว่าอุปกรณ์แบบสัมผัสทั้งหมดเป็นหน้าจอสัมผัส
Touch.orientationAware
คำจำกัดความ: touch.orientationAware
= 0
| 1
ระบุว่าอุปกรณ์แบบสัมผัสควรตอบสนองต่อการเปลี่ยนแปลงการวางแนวของจอแสดงผลหรือไม่
-
หากค่าเป็น
1
ระบบจะหมุนตำแหน่งการสัมผัสที่อุปกรณ์ระบบสัมผัสรายงาน เมื่อใดก็ตามที่การวางแนวจอแสดงผลเปลี่ยน -
หากค่าเป็น
0
ตำแหน่งการสัมผัสที่อุปกรณ์ระบบสัมผัสรายงานจะมีภูมิคุ้มกัน เพื่อแสดงการเปลี่ยนการวางแนว
ค่าเริ่มต้นคือ 1
หากอุปกรณ์เป็นหน้าจอสัมผัส 0
หรือไม่เช่นนั้น
ระบบจะแยกความแตกต่างระหว่างหน้าจอสัมผัสและจอแสดงผลภายในและภายนอก หน้าจอสัมผัสภายในที่รับรู้การวางแนวจะมีการหมุนตามการวางแนว ของจอแสดงผลภายใน หน้าจอสัมผัสภายนอกที่รับรู้การวางแนวถูกหมุนอยู่ ตามการวางแนวของจอแสดงผลภายนอก
การรับรู้การวางแนวใช้เพื่อสนับสนุนการหมุนหน้าจอระบบสัมผัสบนอุปกรณ์ เช่น Nexus One ตัวอย่างเช่น เมื่อหมุนอุปกรณ์ตามเข็มนาฬิกา 90 องศาจากการวางแนวตามปกติ ระบบจะแมปตำแหน่งสัมบูรณ์ของการแตะใหม่เพื่อให้การแตะในมุมซ้ายบนของระบบพิกัดสัมบูรณ์ของหน้าจอสัมผัสได้รับการรายงานเป็นการแตะในมุมซ้ายบนของระบบพิกัดที่เปลี่ยนการวางแนวของจอแสดงผล การดำเนินการนี้เพื่อให้ระบบรายงานการแตะด้วยระบบพิกัดเดียวกับที่แอปใช้วาดองค์ประกอบภาพ
ก่อนที่จะมี Honeycomb ระบบจะถือว่าอุปกรณ์แบบสัมผัสทั้งหมดรับรู้การวางแนว
touch.gestureMode
คำจำกัดความ: touch.gestureMode
= pointer
| spots
|
default
ระบุโหมดการนำเสนอสำหรับท่าทางสัมผัสเคอร์เซอร์ พร็อพเพอร์ตี้การกำหนดค่านี้ มีความเกี่ยวข้องเมื่ออุปกรณ์สัมผัสเป็นประเภทตัวชี้เท่านั้น
-
หากค่าเป็น
pointer
ท่าทางสัมผัสของทัชแพดจะแสดงผ่านเคอร์เซอร์ คล้ายกับเคอร์เซอร์เมาส์ -
หากค่าเป็น
spots
ท่าทางสัมผัสบนแท็บเล็ตจะแสดงโดยจุดยึดที่แสดงจุดศูนย์กลางของท่าทางสัมผัสและจุดกลมชุดหนึ่งที่แสดงตำแหน่งของนิ้วแต่ละนิ้ว
ค่าเริ่มต้นคือ pointer
เมื่อพร็อพเพอร์ตี้อินพุต INPUT_PROP_SEMI_MT
มีการตั้งค่าไว้ หรือ spots
ฟิลด์ X และ Y
ช่อง X และ Y จะมีข้อมูลตำแหน่งสำหรับจุดศูนย์กลางของพื้นที่ติดต่อ
การคำนวณ
การคำนวณนั้นตรงไปตรงมา: ข้อมูลตำแหน่งจากไดรเวอร์ระบบสัมผัสคือ แบบเชิงเส้นไปยังระบบพิกัดเอาต์พุต
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, ฟิลด์ขนาด
ช่อง touchMajor
และ touchMinor
อธิบายมิติข้อมูลโดยประมาณ
ของพื้นที่ติดต่อในหน่วยเอาต์พุต (พิกเซล)
ช่อง toolMajor
และ toolMinor
อธิบายมิติข้อมูลโดยประมาณ
ของเครื่องมือเองในหน่วยเอาต์พุต (พิกเซล)
ฟิลด์ size
อธิบายขนาดการแตะปกติที่สัมพันธ์กับ
สัมผัสที่ใหญ่ที่สุดเท่าที่อุปกรณ์ระบบสัมผัสจะรับได้ ขนาดที่ปรับมาตรฐานได้น้อยที่สุดคือ 0.0 (ไม่มีการตรวจจับหรือวัดไม่ได้) และขนาดที่ปรับมาตรฐานได้มากที่สุดคือ 1.0 (พื้นที่เซ็นเซอร์มีสัญญาณเต็ม)
เมื่อวัดทั้งความยาวและความกว้างโดยประมาณได้ ช่อง touchMajor
จะระบุขนาดที่ยาวกว่า และช่อง touchMinor
จะระบุขนาดที่สั้นกว่าของบริเวณที่สัมผัส เมื่อวัดได้เฉพาะเส้นผ่านศูนย์กลางโดยประมาณของพื้นที่สัมผัส ฟิลด์ touchMajor
และ touchMinor
จะเท่ากัน
ในทำนองเดียวกัน ช่อง toolMajor
จะระบุขนาดที่ยาวกว่า และช่อง toolMinor
จะระบุขนาดที่สั้นกว่าของพื้นที่หน้าตัดของเครื่องมือ
หากไม่มีขนาดการสัมผัสแต่มีขนาดเครื่องมือ ระบบจะตั้งค่าขนาดเครื่องมือให้เท่ากับขนาดการสัมผัส ในทางกลับกัน หากเครื่องมือไม่มีขนาด แต่ขนาดการแตะพร้อมใช้งาน จะมีการตั้งค่าขนาดการสัมผัสเป็นขนาดเครื่องมือ
อุปกรณ์แบบสัมผัสจะวัดหรือรายงานขนาดการสัมผัสและขนาดเครื่องมือด้วยวิธีต่างๆ การใช้งานในปัจจุบันรองรับการวัดที่ต่างกัน 3 ประเภท ดังนี้ เส้นผ่านศูนย์กลาง พื้นที่ และกรอบล้อมรอบทางเรขาคณิตในหน่วยพื้นผิว
คําจํากัดความ: touch.size.calibration
= none
|
geometric
| diameter
| area
| default
ระบุประเภทการวัดที่ไดรเวอร์การสัมผัสใช้เพื่อรายงานขนาดการสัมผัสและขนาดเครื่องมือ
-
หากค่าเป็น
none
ระบบจะตั้งค่าขนาดเป็น 0 -
หากค่าเป็น
geometric
ระบบจะถือว่าขนาดที่ระบุเป็นหน่วยพื้นที่เดียวกันกับตําแหน่ง ดังนั้นระบบจะปรับขนาดในลักษณะเดียวกัน -
หากค่าคือ
diameter
ระบบจะถือว่าขนาดนั้นสัมพันธ์กับเส้นผ่านศูนย์กลาง (ความกว้าง) ของการสัมผัสหรือเครื่องมือ -
หากค่าเป็น
area
จะถือว่าขนาดเป็นสัดส่วนกับ บริเวณที่มีการแตะหรือเครื่องมือ -
หากค่าเป็น
default
ระบบจะใช้การปรับเทียบgeometric
หากพารามิเตอร์ แกนraw.touchMajor
หรือraw.toolMajor
สามารถใช้ได้ มิฉะนั้นจะใช้แกน การปรับเทียบnone
touch.size.scale
คําจํากัดความ: touch.size.scale
= <จำนวนทศนิยมที่ไม่เป็นลบ>
ระบุค่าตัวคูณมาตราส่วนคงที่ที่ใช้ในการปรับเทียบ
ค่าเริ่มต้นคือ 1.0
touch.size.bias
คําจํากัดความ: touch.size.bias
= <a non-negative floating point number>
ระบุค่าการให้น้ำหนักคงที่ที่ใช้ในการปรับเทียบ
ค่าเริ่มต้นคือ 0.0
touch.size.isSummed
คำจำกัดความ: touch.size.isSummed
= 0
| 1
ระบุว่าขนาดจะได้รับการรายงานเป็นผลรวมของขนาดทั้งหมดหรือไม่ รายชื่อติดต่อที่ใช้งานอยู่ หรือรายงานแยกสำหรับแต่ละรายชื่อติดต่อ
-
หากค่าเป็น
1
ขนาดที่รายงานจะหารด้วยตัวเลข ก่อนใช้งาน -
หากค่าคือ
0
ระบบจะใช้ขนาดที่รายงานตามที่เป็นอยู่
ค่าเริ่มต้นคือ 0
อุปกรณ์ระบบสัมผัสบางรุ่น โดยเฉพาะแบบ "กึ่ง MT" อุปกรณ์ไม่สามารถแยกความแตกต่าง
มิติข้อมูลแต่ละรายการของรายชื่อติดต่อหลายรายการ เพื่อรายงานการวัดขนาด
ที่แสดงพื้นที่หรือความกว้างทั้งหมด คุณควรตั้งค่าพร็อพเพอร์ตี้นี้เป็น 1
สำหรับอุปกรณ์ดังกล่าวเท่านั้น หากไม่แน่ใจ ให้ตั้งค่านี้เป็น 0
การคำนวณ
การคํานวณฟิลด์ touchMajor
, touchMinor
, toolMajor
,
toolMinor
และ size
ขึ้นอยู่กับพารามิเตอร์การสอบเทียบที่ระบุ
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
อธิบายความดันทางกายภาพโดยประมาณที่ใช้กับ
อุปกรณ์สัมผัสเป็นค่ามาตรฐานระหว่าง 0.0 (ไม่มีการสัมผัส) และ 1.0 (ความดันปกติ)
หากแรงดันเป็น 0 แสดงว่าเครื่องมือวางอยู่เหนือเครื่องมือ
touch.pressure.calibration
คำจำกัดความ: touch.pressure.calibration
= none
|
physical
| amplitude
| default
ระบุประเภทการวัดที่ไดรเวอร์การสัมผัสใช้เพื่อรายงานแรงกด
-
หากค่าเป็น
none
แสดงว่าระบบไม่ทราบแรงกด จึงตั้งค่าเป็น 1.0 เมื่อสัมผัสและ 0.0 เมื่อวางเมาส์เหนือ -
หากค่าคือ
physical
ระบบจะถือว่าแกนแรงกดจะวัดความเข้มของแรงกดจริงที่กดลงบนแท็บเล็ตสัมผัส -
หากค่าเป็น
amplitude
ระบบจะถือว่าแกนความดันจะวัดแอมพลิจูดของสัญญาณ ซึ่งเกี่ยวข้องกับขนาดของหน้าสัมผัสและแรงกดที่กระทำ -
หากค่าคือ
default
ระบบจะใช้การปรับเทียบphysical
หากแกนความดันพร้อมใช้งาน ไม่เช่นนั้นจะใช้none
touch.pressure.scale
คําจํากัดความ: touch.pressure.scale
= <a non-negative floating point number>
ระบุค่าตัวคูณมาตราส่วนคงที่ที่ใช้ในการปรับเทียบ
ค่าเริ่มต้นคือ 1.0 / raw.pressure.max
การคำนวณ
การคํานวณของช่อง pressure
จะขึ้นอยู่กับพารามิเตอร์การสอบเทียบที่ระบุ
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
อธิบายการวางแนวของการแตะและเครื่องมือว่าเป็น
การวัดเชิงมุม การวางแนว0
บ่งบอกว่าแกนหลักคือ
ในแนวตั้ง -PI/2
แสดงว่าแกนหลักอยู่ทางซ้าย
PI/2
หมายความว่าแกนหลักอยู่ด้านขวา เมื่อสไตลัส
มีเครื่องมืออยู่ สามารถอธิบายช่วงการวางแนวแบบวงกลมเต็มได้
จาก -PI
หรือ PI
ฟิลด์ tilt
จะอธิบายความลาดเอียงของเครื่องมือเป็นการวัดเชิงมุม
การเอียง 0
บ่งบอกว่าเครื่องมือตั้งฉากกับพื้นผิว
การเอียงที่ PI/2
แสดงว่าเครื่องมือวางราบบนพื้นผิว
touch.orientation.calibration
คําจํากัดความ: touch.orientation.calibration
= none
|
interpolated
| vector
| default
ระบุประเภทการวัดที่ไดรเวอร์ระบบสัมผัสเพื่อรายงานการวางแนว
- หากค่านี้เป็น
none
ระบบจะไม่ทราบการวางแนวจึงตั้งค่าเป็น 0 - หากค่าเป็น
interpolated
การวางแนวจะมีการประมาณค่าในช่วงเชิงเส้นเพื่อให้ ค่าดิบของraw.orientation.min
แมปกับ-PI/2
และค่าดิบของraw.orientation.max
แผนที่ไปยังPI/2
ค่าศูนย์กลางของ(raw.orientation.min + raw.orientation.max) / 2
แมปไปยัง0
- หากค่าเป็น
vector
ระบบจะตีความการวางแนวเป็นองค์ประกอบเวกเตอร์ที่แพ็กไว้ ของช่อง 4 บิตแบบมีเครื่องหมาย 2 ช่อง การนำเสนอนี้ใช้ในโปรโตคอลตามออบเจ็กต์ Atmel ส่วน เมื่อถอดรหัสแล้ว เวกเตอร์จะให้มุมการวางแนวและระดับความเชื่อมั่น ระบบจะใช้ความเชื่อมั่นของขนาดเพื่อปรับขนาดข้อมูลขนาด เว้นแต่ว่าข้อมูลจะเป็นแบบเรขาคณิต - หากค่าเป็น
default
ระบบจะใช้การปรับเทียบinterpolated
หากมีแกนการวางแนว ให้ใช้none
การคำนวณ
การคำนวณช่อง orientation
และ tilt
จะขึ้นอยู่กับพารามิเตอร์การสอบเทียบที่ระบุและอินพุตที่ใช้ได้
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
อธิบายระยะห่างระหว่างเครื่องมือและอุปกรณ์ระบบสัมผัส
แพลตฟอร์ม ค่า 0.0 บ่งบอกถึงการสัมผัสโดยตรง และค่าที่มากขึ้นบ่งบอกถึงระยะห่างจากพื้นผิวที่เพิ่มขึ้น
touch.distance.calibration
คำจำกัดความ: touch.distance.calibration
= none
|
scaled
| default
ระบุประเภทการวัดที่ไดรเวอร์การสัมผัสใช้เพื่อรายงานระยะทาง
-
หากค่าเป็น
none
ระบบจะไม่ทราบระยะทาง จึงตั้งเป็น 0 -
หากค่าคือ
scaled
ระบบจะคูณระยะทางที่รายงานด้วยปัจจัยการแปลงค่าคงที่ -
หากค่าเป็น
default
ระบบจะใช้การปรับเทียบscaled
หากพารามิเตอร์ มีแกนระยะทาง หรือใช้none
touch.distance.scale
คําจํากัดความ: touch.distance.scale
= <a non-negative floating point number>
ระบุค่าตัวคูณมาตราส่วนคงที่ที่ใช้ในการปรับเทียบ
ค่าเริ่มต้นคือ 1.0
การคำนวณ
การคำนวณช่อง distance
จะขึ้นอยู่กับการเทียบมาตรฐานที่ระบุ
พารามิเตอร์
If touch.distance.calibration == "scaled": output.distance = raw.distance * touch.distance.scale Else output.distance = 0 End If
ตัวอย่าง
# 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
หมายเหตุความเข้ากันได้
คุณสมบัติการกำหนดค่าสำหรับอุปกรณ์ระบบสัมผัสมีการเปลี่ยนแปลงอย่างมากใน Android Ice Cream Sandwich 4.0 ไฟล์การกำหนดค่าอุปกรณ์อินพุตทั้งหมดสำหรับการสัมผัส อุปกรณ์ต้องได้รับการอัปเดตให้ใช้พร็อพเพอร์ตี้การกำหนดค่าใหม่
คุณอาจต้องอัปเดตไดรเวอร์ของอุปกรณ์แบบสัมผัสรุ่นเก่าด้วย
ไฟล์การแมปแป้นเสมือน
อุปกรณ์แบบสัมผัสสามารถใช้เพื่อติดตั้งใช้งานปุ่มเสมือนได้
ซึ่งทำได้หลายวิธี ขึ้นอยู่กับความสามารถของ ตัวควบคุมระบบสัมผัส คุณสามารถกำหนดค่าตัวควบคุมระบบสัมผัสบางตัวได้โดยตรงเพื่อนำไปใช้ ซอฟต์คีย์โดยการตั้งค่าการลงทะเบียนเฟิร์มแวร์ บางครั้งก็ควรทำการแมปจากพิกัดการสัมผัสไปยังรหัสคีย์ในซอฟต์แวร์
เมื่อมีการใช้คีย์เสมือนในซอฟต์แวร์ เคอร์เนลต้องส่งออกแมปคีย์เสมือน
ที่เรียกว่า virtualkeys.<devicename>
เป็นคุณสมบัติของกระดาน ตัวอย่างเช่น
หากไดรเวอร์อุปกรณ์หน้าจอสัมผัสรายงานชื่ออุปกรณ์เป็น "touchyfeely" จากนั้น
ไฟล์แมปคีย์เสมือนต้องมีเส้นทาง
/sys/board_properties/virtualkeys.touchyfeely
ไฟล์แผนที่คีย์เสมือนอธิบายพิกัดและรหัสคีย์ Linux ของคีย์เสมือน บนหน้าจอสัมผัส
นอกเหนือจากไฟล์คีย์แมปเสมือน ต้องมีเลย์เอาต์คีย์ที่สอดคล้องกัน
และไฟล์แมปอักขระคีย์เพื่อแมปโค้ดคีย์ Linux กับโค้ดคีย์ Android และ
เพื่อระบุประเภทของอุปกรณ์แป้นพิมพ์ (โดยปกติจะเป็น SPECIAL_FUNCTION
)
วากยสัมพันธ์
ไฟล์การแมปคีย์เสมือนคือไฟล์ข้อความธรรมดาที่ประกอบด้วยลำดับคีย์เสมือน คำอธิบายการออกแบบที่คั่นด้วยบรรทัดใหม่หรือด้วยเครื่องหมายทวิภาค
บรรทัดของความคิดเห็นขึ้นต้นด้วย "#" แล้วไปต่อจนจบบรรทัด
คีย์เสมือนแต่ละรายการจะอธิบายด้วยคอมโพเนนต์ 6 รายการที่คั่นด้วยโคลอน ดังนี้
0x01
: รหัสเวอร์ชัน ต้องเป็น0x01
เสมอ- <Linux key code>: รหัสคีย์ Linux ของคีย์เสมือน
- <centerX>: พิกัดพิกเซล X ของกึ่งกลางของแป้นเสมือน
- <centerY>: พิกัดพิกเซล Y ของกึ่งกลางของปุ่มเสมือน
- <width>: ความกว้างของแป้นเสมือนในหน่วยพิกเซล
- <height>: ความสูงของแป้นเสมือนในหน่วยพิกเซล
พิกัดและขนาดทั้งหมดจะระบุเป็นระบบพิกัดของการแสดงผล
ต่อไปนี้คือไฟล์การแมปคีย์เสมือนที่เขียนทั้งหมดในบรรทัดเดียว
# 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
ไฟล์การแมปคีย์เสมือนเดียวกันยังเขียนในหลายบรรทัดได้ด้วย
# 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
ในตัวอย่างข้างต้น หน้าจอสัมผัสมีความละเอียด 480x800 ดังนั้น ปุ่มเสมือนทั้งหมดจึงมีพิกัด <centerY> เท่ากับ 835 ซึ่งอยู่ต่ำกว่าพื้นที่ที่มองเห็นได้ของหน้าจอสัมผัสเล็กน้อย
คีย์แรกมีโค้ดสแกนของ Linux 158
(KEY_BACK
) ที่กึ่งกลาง X ของ
55
, กึ่งกลาง Y ของ 835
, กว้าง 90
และสูง
55
ตัวอย่าง
ไฟล์การแมปคีย์เสมือน: /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
ไฟล์เลย์เอาต์คีย์: /system/usr/keylayout/touchyfeely.kl
key 158 BACK key 139 MENU key 172 HOME key 217 SEARCH
ไฟล์การแมปอักขระคีย์: /system/usr/keychars/touchyfeely.kcm
type SPECIAL_FUNCTION
ท่าทางสัมผัสของตัวชี้แบบมัลติทัชโดยอ้อม
ในโหมดเคอร์เซอร์ ระบบจะตีความท่าทางสัมผัสต่อไปนี้
- แตะด้วย 1 นิ้ว: คลิก
- การเคลื่อนไหวด้วย 1 นิ้ว: เลื่อนเคอร์เซอร์
- การกดปุ่มบวกด้วยนิ้วเดียวกด: ลากเคอร์เซอร์
- การเคลื่อนไหวด้วย 2 นิ้วโดยทั้ง 2 นิ้วเคลื่อนไหวไปในทิศทางเดียวกัน ให้ลากพื้นที่ใต้เคอร์เซอร์ไปในทิศทางนั้น โดยที่เคอร์เซอร์จะไม่ขยับ
- ใช้ 2 นิ้วขยับทั้ง 2 นิ้วเข้าหากันหรือแยกออกจากกัน ทิศทางต่างๆ: แพน/ปรับขนาด/หมุนพื้นที่รอบๆ ตัวชี้ ตัวตัวชี้จะไม่เคลื่อนที่
- การเคลื่อนไหวหลายนิ้ว: ท่าทางสัมผัสรูปแบบอิสระ
การปฏิเสธปาล์ม
ตั้งแต่ Android 13 ระบบจะปฏิเสธอินพุตจากฝ่ามือโดยอัตโนมัติ
เมื่อเปิดใช้เฟรมเวิร์กในตัว ระบบยังคงรองรับโซลูชันที่สร้างขึ้นเองภายในแม้ว่าอาจต้องแก้ไขให้แสดง Flag TOOL_TYPE_PALM
เมื่อตรวจพบฝ่ามือ เฟรมเวิร์กในตัวยังทำงานร่วมกับโซลูชันที่กำหนดเองได้ด้วย
โมเดลจริงจะพิจารณาข้อมูลท่าทางสัมผัส 90 มิลลิวินาทีแรก ที่ตัวชี้ปัจจุบัน และที่
ตัวชี้ที่อยู่รอบๆ จากนั้นพิจารณาว่าอยู่ห่างจากขอบจอแสดงผลที่สัมผัสนั้นมากน้อยเพียงใด
จากนั้นจะพิจารณาว่าตัวชี้ใดเป็นฝ่ามือบ้าง โดยใช้ทีละจุด และยังรวมถึง
ระบุขนาดของรายชื่อติดต่อแต่ละรายการ ตามที่รายงานโดย touchMajor
และ
touchMinor
จากนั้นเฟรมเวิร์ก Android จะนำเคอร์เซอร์ที่ทำเครื่องหมายเป็น
จากสตรีมการสัมผัส
หากระบบส่งเคอร์เซอร์ไปยังแอปแล้ว ระบบจะดำเนินการอย่างใดอย่างหนึ่งต่อไปนี้
- (หากมีเคอร์เซอร์อื่นๆ ที่ใช้งานอยู่) ยกเลิกตัวชี้ด้วย
ACTION_POINTER_UP
และFLAG_CANCELED
แล้ว - (หากเป็นเคอร์เซอร์เดียว) ยกเลิกเคอร์เซอร์ด้วย
ACTION_CANCEL
API สาธารณะ MotionEvent.FLAG_CANCELED
ระบุว่าเหตุการณ์ปัจจุบันไม่ควรทริกเกอร์การดําเนินการของผู้ใช้ แฟล็กนี้ตั้งค่าไว้สำหรับทั้ง ACTION_CANCEL
และ ACTION_POINTER_UP
หากไม่ได้ส่งตัวชี้แบบฝ่ามือไปยังแอป ระบบเพียงแค่วางตัวชี้แบบนั้นทิ้ง
เปิดใช้ฟีเจอร์ปฏิเสธฝ่ามือ
- ในไดรเวอร์การสัมผัส ให้ใช้มาโคร
input_abs_set_res
เพื่อตั้งค่าความละเอียดสำหรับช่องต่อไปนี้ (หน่วยคือพิกเซลต่อมม.)ABS_MT_POSITION_X
ABS_MT_POSITION_Y
ABS_MT_TOUCH_MAJOR
ABS_MT_TOUCH_MINOR
การสนับสนุนสำหรับ
ABS_MT_TOUCH_MINOR
เป็นตัวเลือกที่ไม่บังคับ อย่างไรก็ตาม หากอุปกรณ์รองรับ ให้ตรวจสอบว่าได้ตั้งค่าความละเอียดอย่างถูกต้อง - หากต้องการยืนยันว่าตั้งค่าช่องอย่างถูกต้อง ให้เรียกใช้คำสั่งต่อไปนี้
$ adb shell getevent -li
- หากต้องการเปิดใช้ฟีเจอร์นี้ระหว่างรันไทม์ ให้เรียกใช้คำสั่งต่อไปนี้
$ adb shell device_config put input_native_boot palm_rejection_enabled 1
- เริ่มขั้นตอน
system_server
ใหม่$ adb shell stop && adb shell start
- ยืนยันว่า
adb shell dumpsys input
แสดงให้เห็นว่ามีตัวปฏิเสธการฝ่ามืออยู่ภายในUnwantedInteractionBlocker
หากไม่ ให้ตรวจสอบบันทึกที่เกี่ยวข้องกับอินพุตเพื่อหาเบาะแสว่าอาจมีการกําหนดค่าอะไรไม่ถูกต้องโปรดดูตัวอย่างต่อไปนี้เพื่อเป็นข้อมูลอ้างอิง
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: {} - หากต้องการเปิดใช้ฟีเจอร์นี้อย่างถาวร ให้เพิ่มคำสั่ง sysprop ที่เกี่ยวข้องในไฟล์
init**rc
ดังนี้setprop persist.device_config.input_native_boot.palm_rejection_enabled 1