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) เพื่อดูข้อมูลเกี่ยวกับตําแหน่งและรูปแบบของไฟล์เหล่านี้
ถัดไป ระบบจะโหลดไฟล์การกำหนดค่าอุปกรณ์อินพุตสำหรับอุปกรณ์ระบบสัมผัส
อุปกรณ์ระบบสัมผัสในตัวทั้งหมดควรมีไฟล์การกำหนดค่าอุปกรณ์อินพุต ถ้าไม่มีไฟล์การกำหนดค่าอุปกรณ์อินพุตแสดง ระบบจะ เลือกการกำหนดค่าเริ่มต้นที่เหมาะสมสำหรับวัตถุประสงค์ทั่วไป อุปกรณ์ต่อพ่วงระบบสัมผัส เช่น หน้าจอสัมผัส USB หรือ Bluetooth HID ภายนอก หรือทัชแพด ค่าเริ่มต้นเหล่านี้ไม่ได้ออกแบบมาสำหรับหน้าจอแบบสัมผัสในตัวและ อาจทำให้เกิดลักษณะการทำงานที่ไม่ถูกต้อง
หลังจากโหลดการกำหนดค่าอุปกรณ์อินพุตแล้ว ระบบจะแยกประเภท เป็นอุปกรณ์หน้าจอสัมผัส ทัชแพด หรือตัวชี้
- อุปกรณ์หน้าจอสัมผัสใช้สำหรับการควบคุมวัตถุต่างๆ บนอุปกรณ์ บนหน้าจอ ผู้ใช้แตะที่หน้าจอโดยตรง ระบบจึงไม่ และจำเป็นต้องมีพื้นที่เพิ่มเติมเพื่อระบุวัตถุที่ถูก ถูกปรับแต่ง
- อุปกรณ์ทัชแพดใช้สำหรับให้ข้อมูลการจัดตำแหน่งแบบสัมบูรณ์ ไปยังแอปเกี่ยวกับการแตะบนพื้นที่เซ็นเซอร์ที่ระบุ มีประโยชน์ สำหรับแท็บเล็ตดิจิทัล
- อุปกรณ์ชี้ใช้สำหรับควบคุมออบเจ็กต์โดยอ้อมบน โดยใช้เคอร์เซอร์ ระบบจะตีความนิ้วว่าเป็นตัวชี้แบบมัลติทัช เครื่องมืออื่นๆ เช่น สไตลัส จะตีความโดยใช้ ตำแหน่งสัมบูรณ์ โปรดดู ตัวชี้แบบมัลติทัชโดยอ้อม เพื่อดูข้อมูลเพิ่มเติม
กฎต่อไปนี้ใช้ในการจัดประเภทอุปกรณ์อินพุตเป็นหน้าจอสัมผัส ทัชแพด หรืออุปกรณ์ตัวชี้
- หากตั้งค่าพร็อพเพอร์ตี้
touch.deviceType
ไว้ ประเภทอุปกรณ์จะเป็น ตั้งค่าตามที่ระบุ - หากอุปกรณ์อินพุตรายงานว่ามี
INPUT_PROP_DIRECT
พร็อพเพอร์ตี้อินพุต (ผ่านEVIOCGPROP
ioctl) ประเภทอุปกรณ์คือ ตั้งค่าเป็นหน้าจอสัมผัส เงื่อนไขนี้จะถือว่าการแตะอินพุตโดยตรง จะติดอยู่กับจอแสดงผลที่เชื่อมต่อด้วย - หากอุปกรณ์อินพุตรายงานว่ามี
INPUT_PROP_POINTER
พร็อพเพอร์ตี้อินพุต (ผ่านEVIOCGPROP
ioctl) จากนั้นประเภทอุปกรณ์ ตั้งค่าเป็น pointer - หากอุปกรณ์อินพุตรายงานการมีอยู่ของ
REL_X
หรือREL_Y
ระบบจะตั้งค่าประเภทอุปกรณ์เป็นทัชแพด เงื่อนไขนี้ แก้ความกำกวมสำหรับอุปกรณ์อินพุตที่มีทั้งเมาส์และ ทัชแพด ในกรณีนี้ จะไม่มีการใช้ทัชแพดเพื่อควบคุม เนื่องจากเมาส์เป็นตัวควบคุมอยู่แล้ว - ไม่เช่นนั้น ระบบจะตั้งค่าประเภทอุปกรณ์เป็นตัวชี้ ซึ่งค่าเริ่มต้นนี้จะช่วยให้มั่นใจว่า ทัชแพดที่ไม่ได้ระบุวัตถุประสงค์พิเศษอื่นใดไว้ ควบคุมเคอร์เซอร์
ปุ่ม
ปุ่มเป็นส่วนควบคุมที่ไม่บังคับซึ่งแอปสามารถใช้เพื่อดำเนินการ ฟังก์ชันเพิ่มเติม ปุ่มบนอุปกรณ์แบบสัมผัสจะทำงานคล้ายกับเมาส์ และมักจะใช้กับอุปกรณ์แบบสัมผัสตัวชี้หรือกับ สไตลัส
รองรับปุ่มต่อไปนี้
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 โปรดดูเอกสารประกอบเกี่ยวกับโปรโตคอลมัลติทัชของ Linux เพื่อดูรายละเอียดเพิ่มเติมBTN_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 แม้ว่าเครื่องมือจะติดต่อกับคุณโดยตรง ค่าที่แน่นอนที่รายงานจะขึ้นอยู่กับ ในลักษณะที่ฮาร์ดแวร์วัดระยะทางข้อมูลระยะทางในการรายงานเป็นไม่บังคับ แต่เราขอแนะนำให้ใช้กับ สไตลัส
ค่าที่
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
ท่าทางสัมผัสของทัชแพดจะแสดงโดย Anchor ซึ่งแสดงจุดศูนย์กลางของท่าทางสัมผัสและชุดจุดวงกลม ที่แสดงตำแหน่งของนิ้วมือแต่ละนิ้ว
ค่าเริ่มต้นคือ 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
= <จำนวนทศนิยมที่ไม่เป็นลบ>
ระบุค่าการให้น้ำหนักคงที่ที่ใช้ในการปรับเทียบ
ค่าเริ่มต้นคือ 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
= <จำนวนทศนิยมที่ไม่เป็นลบ>
ระบุค่าตัวคูณมาตราส่วนคงที่ที่ใช้ในการปรับเทียบ
ค่าเริ่มต้นคือ 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
= <จำนวนทศนิยมที่ไม่เป็นลบ>
ระบุค่าตัวคูณมาตราส่วนคงที่ที่ใช้ในการปรับเทียบ
ค่าเริ่มต้นคือ 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>: รหัสคีย์ 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
ท่าทางสัมผัสของตัวชี้แบบมัลติทัชโดยอ้อม
ในโหมดเคอร์เซอร์ ระบบจะตีความท่าทางสัมผัสต่อไปนี้
- แตะเพียงครั้งเดียว: คลิก
- การเคลื่อนไหวด้วยนิ้วเดียว: เลื่อนเคอร์เซอร์
- การกดปุ่มบวกด้วยนิ้วเดียวกด: ลากเคอร์เซอร์
- ใช้ 2 นิ้วเคลื่อนที่ทั้ง 2 นิ้วไปในทิศทางเดียวกัน: ลากพื้นที่ใต้ตัวชี้ ในทิศทางนั้น ตัวตัวชี้จะไม่เคลื่อนที่
- ใช้ 2 นิ้วขยับทั้ง 2 นิ้วเข้าหากันหรือแยกออกจากกัน ทิศทางต่างๆ: แพน/ปรับขนาด/หมุนพื้นที่รอบๆ ตัวชี้ ตัวตัวชี้จะไม่เคลื่อนที่
- การเคลื่อนไหวหลายนิ้ว: ท่าทางสัมผัสรูปแบบอิสระ
การปฏิเสธปาล์ม
ตั้งแต่ Android 13 ระบบจะปฏิเสธอินพุตจากฝ่ามือโดยอัตโนมัติ
เมื่อเปิดใช้เฟรมเวิร์กในตัว ระบบยังคงรองรับโซลูชันที่พัฒนาขึ้นเองภายในองค์กร
แต่อาจต้องแก้ไขเพื่อแสดง TOOL_TYPE_PALM
Flag เมื่อฝ่ามือ
ตรวจพบ เฟรมเวิร์กในตัวยังทำงานร่วมกับโซลูชันที่กำหนดเองได้อีกด้วย
โมเดลจริงจะพิจารณาข้อมูลท่าทางสัมผัส 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