二、touch事件分析


1、机器touch设备的具体信息

分析:此设备名字:mtk-tpd

支持:key abs

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

type0035支持的最大取值为480


2、touch 事件

触摸事件的type:

#defineSYN_REPORT0

#defineSYN_CONFIG1

#defineSYN_MT_REPORT2

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

#defineABS_MT_TOUCH_MAJOR0x30/*Majoraxisoftouchingellipse*/

#defineABS_MT_TOUCH_MINOR0x31/*Minoraxis(omitifcircular)*/

#defineABS_MT_WIDTH_MAJOR0x32/*Majoraxisofapproachingellipse*/

#defineABS_MT_WIDTH_MINOR0x33/*Minoraxis(omitifcircular)*/

#defineABS_MT_ORIENTATION0x34/*Ellipseorientation*/

#defineABS_MT_POSITION_X0x35/*CenterXellipseposition*/

#defineABS_MT_POSITION_Y0x36/*CenterYellipseposition*/

#defineABS_MT_TOOL_TYPE0x37/*Typeoftouchingdevice*/

#defineABS_MT_BLOB_ID0x38/*Groupasetofpacketsasablob*/

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

intEventHub::open_device(constchar*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("Itisamulti-touchscreen!");

}

//single-touch?

elseif(test_bit(BTN_TOUCH,key_bitmask)

&&test_bit(ABS_X,abs_bitmask)

&&test_bit(ABS_Y,abs_bitmask)){

device->classes|=CLASS_TOUCHSCREEN;

//LOGI("Itisasingle-touchscreen!");

}

………………..

}


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

1、是否支持BTN_TOUCH,通过判断该abs设备是否还支持key事件来判断是否需要BTN_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

更多相关文章

  1. android 事件传递机制 【转】
  2. android实现双击事件暨多击事件详解
  3. Android开发之多点触摸(Multitouch)
  4. Android(安卓)工具包 xUtils 3.3.16
  5. android Touch事件的处理流程
  6. 2013 HTML5中国峰会演讲:Android上的HTML5:过去,现在和将来
  7. Android(安卓)Navigation Drawer简记
  8. android的WebView、WebViewClient、WebChromeClient的关系
  9. Android(安卓)UI开发第三十四篇——SlidingPaneLayout

随机推荐

  1. android 软引用和lrucache的区别
  2. android适配器的简单使用
  3. android 2.2 通讯录
  4. Android Studio学习:简单控件:Button控件的
  5. 水平布局linerlayout
  6. android中任务栈的处理方式
  7. 动态的添加ImageView并居中显示
  8. Android Dialog中的EditText 弹出软键盘
  9. 【原创】Android 设置Dialog的长宽和位置
  10. Android学习(1) -- Android简单历史