> 文档中心 > android多指控制协议详细解答

android多指控制协议详细解答


类型部分:

1.EV_SYN

同步事件完,在事件开始或完成会有
对应的code:
0004:代表一个事件开始(不必要)
0005:代表一个事件开始(不必要)
SYN_REPORT:代表一个事件的结束 (必要)

2.EV_ABS

事件的一种绝对坐标类型
对应code:
2.0 ABS_MT_SLOT
本质代表者不同手指,它的value代表手指id
2.1 ABS_MT_TRACKING_ID

类型B特有的,实际上,每个slot会和一个ID相对应,一个非负数的表示一次接触,-1表示这是一个无用的slot(或者理解为一次接触的结束) 。无论在接触的类型相对应的slot发生了改变,驱动都应该通过改变这个值来使这个slot失效。并且下一次触摸的ID值会是这次的值加1。

2.2 ABS_MT_POSITION_X,ABS_MT_POSITION_Y

相对于屏幕中心的x,y坐标。

2.3 ABS_MT_TOUCH_MAJOR

接触部分的长轴长度。相当于椭圆的长轴。

2.4 ABS_MT_TOUCH_MINOR

接触部分的短轴长度。相当于椭圆的短轴。

2.5 ABS_MT_PRESSURE
代表按下压力,有的设备不一定有

3.EV_KEY

事件的一种类型。表示是按键(不仅仅指的物理按键也包括TOUCH)事件
对应code:
3.1 BTN_TOUCH

触碰按键。其值是DOWN或者UP。

3.2 BTN_TOOL_FINGER

按键的是finger,并且其值也是DOWN或者UP

4.案例分析

两个手指分别按下,移动,然后分别抬起:

[    1026.632366] /dev/input/event1: EV_SYN0004   00000402--同步头(其实理论上可以省略)[    1026.632366] /dev/input/event1: EV_SYN0005   2576d0ba     [    1026.632366] /dev/input/event1: EV_ABSABS_MT_SLOT   00000000 代表第一个手指,其实第一个也可以没有,有的机器就第一次0是没有这个slot    [    1026.632366] /dev/input/event1: EV_ABSABS_MT_TRACKING_ID   00000016  第一个手指对应的TRACKING_ID   [    1026.632366] /dev/input/event1: EV_KEYBTN_TOUCH     DOWN     触摸按下    [    1026.632366] /dev/input/event1: EV_KEYBTN_TOOL_FINGER      DOWN  [    1026.632366] /dev/input/event1: EV_ABSABS_MT_POSITION_X    0000011a 按下X轴坐标    [    1026.632366] /dev/input/event1: EV_ABSABS_MT_POSITION_Y    00000475 按下Y轴坐标    [    1026.632366] /dev/input/event1: EV_ABSABS_MT_TOUCH_MAJOR   00000003 按下的椭圆长轴    [    1026.632366] /dev/input/event1: EV_SYNSYN_REPORT    00000000     --同步尾(不省略)[    1027.937528] /dev/input/event1: EV_SYN0004   00000403     [    1027.937528] /dev/input/event1: EV_SYN0005   37b18cde     [    1027.937528] /dev/input/event1: EV_ABSABS_MT_POSITION_X    0000011b 这里代表第一个手指移动后坐标     [    1027.937528] /dev/input/event1: EV_ABSABS_MT_POSITION_Y    00000476     [    1027.937528] /dev/input/event1: EV_SYNSYN_REPORT    00000000   [    1028.917333] /dev/input/event1: EV_SYN0004   00000404     [    1028.917333] /dev/input/event1: EV_SYN0005   367d836c     [    1028.917333] /dev/input/event1: EV_ABSABS_MT_TOUCH_MINOR   00000003  这里是第一个手指的短轴,因为之前一直是slot为0   [    1028.917333] /dev/input/event1: EV_ABSABS_MT_SLOT   00000001 代表第二手指出来了    [    1028.917333] /dev/input/event1: EV_ABSABS_MT_TRACKING_ID   00000017 第二个手指对应TRACKING_ID[    1028.917333] /dev/input/event1: EV_ABSABS_MT_POSITION_X    00000324   第二手指坐标  [    1028.917333] /dev/input/event1: EV_ABSABS_MT_POSITION_Y    00000165     [    1028.917333] /dev/input/event1: EV_ABSABS_MT_TOUCH_MAJOR   00000002     [    1028.917333] /dev/input/event1: EV_ABSABS_MT_TOUCH_MINOR   00000002     第二个手指短轴[    1028.917333] /dev/input/event1: EV_SYNSYN_REPORT    00000000      [    1029.047446] /dev/input/event1: EV_SYN0004   00000405     [    1029.047446] /dev/input/event1: EV_SYN0005   02afd368     [    1029.047446] /dev/input/event1: EV_ABSABS_MT_POSITION_Y    00000166     第二个手指坐标[    1029.047446] /dev/input/event1: EV_ABSABS_MT_TOUCH_MAJOR   00000004     [    1029.047446] /dev/input/event1: EV_ABSABS_MT_TOUCH_MINOR   00000003     [    1029.047446] /dev/input/event1: EV_SYNSYN_REPORT    00000000     [    1029.903648] /dev/input/event1: EV_SYN0004   00000405     [    1029.903648] /dev/input/event1: EV_SYN0005   35c02ec5     [    1029.903648] /dev/input/event1: EV_ABSABS_MT_SLOT   00000000    [    1029.903648] /dev/input/event1: EV_ABSABS_MT_POSITION_X    00000173      第一个手指X坐标[    1029.903648] /dev/input/event1: EV_ABSABS_MT_SLOT   00000001     [    1029.903648] /dev/input/event1: EV_ABSABS_MT_POSITION_X    00000321      第二个手指X坐标[    1029.903648] /dev/input/event1: EV_SYNSYN_REPORT    00000000      [    1031.902947] /dev/input/event1: EV_SYN0004   00000407     [    1031.902947] /dev/input/event1: EV_SYN0005   35b8a020     [    1031.902947] /dev/input/event1: EV_ABSABS_MT_SLOT   00000000     第一个手指有事件 [    1031.902947] /dev/input/event1: EV_ABSABS_MT_TRACKING_ID   ffffffff     TRACKING_ID为-1代表第一个手指抬起消失[    1031.902947] /dev/input/event1: EV_SYNSYN_REPORT    00000000      [    1032.024946] /dev/input/event1: EV_SYN0004   00000408     [    1032.024946] /dev/input/event1: EV_SYN0005   016372d8     [    1032.024946] /dev/input/event1: EV_ABSABS_MT_SLOT   00000001     第二个手指有事件  [    1032.024946] /dev/input/event1: EV_ABSABS_MT_POSITION_Y    0000016c第二个 Y坐标[    1032.024946] /dev/input/event1: EV_SYNSYN_REPORT    00000000      [    1032.907686] /dev/input/event1: EV_SYN0004   00000408     [    1032.907686] /dev/input/event1: EV_SYN0005   35ebac8c     [    1032.907686] /dev/input/event1: EV_ABSABS_MT_TRACKING_ID   ffffffff     第二个手指消失抬起  [    1032.907686] /dev/input/event1: EV_KEYBTN_TOUCH     UP    抬起[    1032.907686] /dev/input/event1: EV_KEYBTN_TOOL_FINGER      UP    [    1032.907686] /dev/input/event1: EV_SYNSYN_REPORT    00000000      

Android手机大厂Framework系统-Input系统专题实战课
https://ke.qq.com/course/4963459

[入门课,实战课,跨进程专题
ps需要学习深入framework课程和课程优惠
新课程优惠获取请加入qq群:422901085