您的位置:首页 > 移动开发 > Android开发

Android4.0 多点触摸屏新手入门指南

2012-03-01 12:49 267 查看

1 前言

首先,说一段废话。CSDN注册有一段时间了,但是一直没有在上面发表博客,之前发布在其他博客上的文章,由于密码忘记了,所以也无法找回了。好,开始进入正题。

本人也是初学者,并且入行不久。所以应该更适合初学的人学习。

2 通观全局

我们将Android分为三个部分,kernel、framework、app三个部分。由于软件都是跑在硬件的基础之上的,所以硬件上触摸屏需要支持多点触摸。理论上软件是可以支持最多256个手指的触摸,但是硬件的限制,即便是你想上报多于硬件个数的手指的情况下,我们在上层也只能忽略。对于framework,google本身是支持多点触摸的,但是由于专利问题,可能有很多hide的API。但是由于Android是开放平台,所以我们还是可以在此基础上进行自主开发的。

本人之前的学习是在2.3上进行的,由于公司工作任务的原因中间有段停滞的时间。现在重新来看,发现EventHub.cpp和InputReader.cpp变化很大,拿比对软件一看“祖国江山一片红”,当时心里还是有点发慌的,谁让咱是干这行的,很快调整心态进入战斗状态。

既然对以上有了一个大致的了解,所以我们已经通观全局,剩下的任务就是各个击破了。cpu都多核了,我们也不能落后,来多线程操作吧。看内核知识累了就去读framework的代码,是在读恶心了就去看应用应该怎样实现。

3 具体讲解

3.1 KERNEL

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

3.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()函数上报触摸信息开始动作并告诉接收方开始接收下一系列多点触摸信息。

3.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,用来支持硬件跟踪多点信息,即该点属于哪一条线等。

3.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.3 app

此部分本人还没有实现,参考代码TouchExample.java & TouchExampleActivity.java

由于实验还没有进行,所以很多的研究还不是很深入,本人将后续添加实验过程的真实笔记,本人有手写的习惯,神州们可以随时打假!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: