androidevent事件录制回放--2touch事件分析


二、touch事件分析

专注于为中小企业提供成都网站设计、成都网站制作服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业盖州免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上千多家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。


1、机器touch设备的具体信息
android event事件录制回放  --2 touch事件分析android event事件录制回放  --2 touch事件分析
分析:此设备名字:mtk-tpd

          支持:key abs

          支持abs的type:0000 0001 0018...

          type0035支持的最大取值为480


2、touch 事件 

触摸事件的type:

#define SYN_REPORT 0

#define SYN_CONFIG 1

#define SYN_MT_REPORT 2

……………………… ...

#define ABS_MT_TOUCH_MAJOR 0x30 /* Major axis of touching ellipse */

#define ABS_MT_TOUCH_MINOR 0x31 /* Minor axis (omit if circular) */

#define ABS_MT_WIDTH_MAJOR 0x32 /* Major axis of approaching ellipse */

#define ABS_MT_WIDTH_MINOR 0x33 /* Minor axis (omit if circular) */

#define ABS_MT_ORIENTATION 0x34 /* Ellipse orientation */

#define ABS_MT_POSITION_X 0x35 /* Center X ellipse position */

#define ABS_MT_POSITION_Y 0x36 /* Center Y ellipse position */

#define ABS_MT_TOOL_TYPE 0x37 /* Type of touching device */

#define ABS_MT_BLOB_ID 0x38 /* Group a set of packets as a blob */

区分手机设备单点还是多点:

int EventHub::open_device(const char *deviceName)

{

………………………

if (test_bit(ABS_MT_TOUCH_MAJOR, abs_bitmask)

&& test_bit(ABS_MT_POSITION_X, abs_bitmask)

&& test_bit(ABS_MT_POSITION_Y, abs_bitmask)) {

device->classes |= CLASS_TOUCHSCREEN | CLASS_TOUCHSCREEN_MT;

// LOGI("It is a multi-touch screen!");

//single-touch?

else if (test_bit(BTN_TOUCH, key_bitmask)

&& test_bit(ABS_X, abs_bitmask) 

&& test_bit(ABS_Y, abs_bitmask)) {

device->classes |= CLASS_TOUCHSCREEN;

// LOGI("It is a single-touch screen!");

}

……………… ..

}

对于一个Touch事件,不同机型会有不同的组成,你用getevent显示出来的也不一样。可以通过下面几点去组成一个touch事件:

1、是否支持BTN_TOUCH,通过判断该abs设备是否还支持key事件来判断是否需要BTN_TOUCH,像

android event事件录制回放  --2 touch事件分析

android event事件录制回放  --2 touch事件分析这个就是支持key事件的,而且持之BTN_TOUCH(014a :十进制为330)。对于这种设备,

在发送touchdown事件的时候需要添加 eventX 0001 014a 1的事件,对应在touchUp的时候需要添加 eventX 0001 014a 0。

当不支持BTN_TOUCH的时候,就要省去该事件语句

2、判断多点触摸的协议类型,根据判断是否支持ABS_MT_SLOT。

多点触摸协议可以参考http://blog.csdn.net/droidphone/article/details/8434768

文章中详细说明了多点触摸协议的两种类型,还有两种类型分别的事件语句组成

A:有状态类型 

ABS_MT_TRACKING_ID touchDown必须要有值,touchUp的时候值为-1

同步语句只要SYN_REPORT

B:无状态类型

ABS_MT_TRACKING_ID touchDown必须要有值,touchUp的时候值为0

同步语句要包括:SYN_REPORT 、SYN_MT_REPORT

3、对于touchDown,还必须包括:ABS_MT_POSITION_X

                           ABS_MT_POSITION_Y

                           SYN_REPORT

                           ABS_MT_TOUCH_MAJOR

                           ABS_MT_PRESSURE

                                         

4、对于touchMove,还必须包括: ABS_MT_POSITION_X

                                ABS_MT_POSITION_Y

                                SYN_REPORT

                                (无状态)ABS_MT_TRACKING_ID、SYN_MT_REPORT

                                ABS_MT_TOUCH_MAJOR

5、对于touchUP,还必须包括:

          有状态:ABS_MT_TRACKING_ID -1
                       BTN_TOUCH  0
                       SYN_REPORT
          无状态:ABS_MT_TRACKING_ID 0
                       ABS_MT_TOUCH_MAJOR 0
                       BTN_TOUCH  0
                       SYN_MT_REPORT
                       SYN_REPORT

网站题目:androidevent事件录制回放--2touch事件分析
本文URL:http://myzitong.com/article/pipjcp.html