Android4.0多点触摸入门

1 KERNEL  

  对于触摸屏的驱动我们简单的划分为两个主要的部分,一个是注册,另一个是上报。     

1.1    注册 

  单点触摸信息是以ABS承载并按一定顺序发送,如BTN_TOUCH、ABS_X、ABS_Y、SYNC。而多点触摸信息则是以ABS_MT承载并按一定顺序发送,如ABS_MT_POSITION_X、ABS_MT_POSITION_Y,然后通过调用input_mt_sync()产生一个 SYN_MT_REPORT event来标记一个点的结束,告诉接收方接收当前手指的信息并准备接收其它手指的触控信息。最后调用 input_sync()函数上报触摸信息开始动作并告诉接收方开始接收下一系列多点触摸信息。

1.2  上报

  协议定义了一系列ABS_MT事件,这些事件被分为几大类,允许只应用其中的一部份,多点触摸最小的事件集中包括 ABS_MT_TOUCH_MAJOR、ABS_MT_POSITION_X和 ABS_MT_POSITION_Y,以此来实现多点触摸。如果设备支持ABS_MT_WIDTH_MAJOR这个事件,那么此事件可以提供手指触摸接触面积大小。触摸方向等信息可以由ABS_MT_TOUCH_MINOR, ABS_MT_WIDTH_MINOR and ABS_MT_ORIENTATION提供。ABS_MT_TOOL_TYPE提供触摸设备的类别,如手或是笔或是其它。最后有些设备可能会支持 ABS_MT_TRACKING_ID,用来支持硬件跟踪多点信息,即该点属于哪一条线等。

2、 framework

        在Android 4.0中,Event Input地位提高了.在Adroid2.3.5中,它在frameworks/base/libs/ui之下,在Android4.0中,它在 frameworks/base/services/input之下,看到没有,它有了自己的地位,就像在Kernel中一样,有自己门户了。
  
在此文件夹下,目前主要研究两个文件,一个是EventHub.cpp,另一个是InputReader.cpp两个文件。EventHub.cpp主要是完成设备的扫描和识别。而InputReader.cpp完成对设备上报的原始数据的处理工作。
  
而具体的对于APP开发人员来讲主要的数据是通过MotionEvent.java获取。而MotionEvent.java是通过JNI机制与底层进行通信的。
frameworks/base/core/java/android/view/MotionEvent.java --> jni --> frameworks/base/core/jni/android_view_MotionEvent.cpp
        本部分可参考博客:http://blog.csdn.net/myarrow/article/details/7091061

3、app

           参考代码TouchExample.java & TouchExampleActivity.java

posted @ 2012-10-26 14:20  天南星客  阅读(994)  评论(0编辑  收藏  举报