android4.0-input-touch

android4.0-input-touch

ID:40530223

大小:774.99 KB

页数:42页

时间:2019-08-04

android4.0-input-touch_第1页
android4.0-input-touch_第2页
android4.0-input-touch_第3页
android4.0-input-touch_第4页
android4.0-input-touch_第5页
资源描述:

《android4.0-input-touch》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Android4.0inputtouch解析前言:在网上看到好多关于androidinputdevice流程分析,但是都不全,有的只是从linux内核那边分析,有的从android上层分析,而且分析的代码也比较老,都是在android2.3以下,最近在做android4.0下的多点触摸以及校准程序,多点触摸的驱动很好写,在linux内核里面都有现成的例子,照着改就可以了。但是android下的校准程序比较复杂,一种是在androidFramework层进行,一种是在linux内核层进行。对于校准程序来说,需要

2、全屏校准。但是在android4.0下面,下面的导航栏是systemui画的,无法去掉,因此在校准程序里面通过display得到分辨率高度比实际的小,差的那部分就是导航栏的高度。如果以小的高度进行校准,但使用实际的高度进行触摸坐标到屏幕坐标转换,就会导致触摸点偏下的问题。为了解决这个问题,在网上找了很多资料,第一种就是想办法在校准程序里面得到整个屏幕的分辨率,进而让校准程序全屏显示,即把导航栏隐藏,在网上看到又网友用下面例子实现://forphonegetWindow().getDecorView().set

3、SystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);//forpad View.SYSTEM_UI_FLAG_SHOW_FULLSCREEN=4getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_SHOW_FULLSCREEN);经过自己实验,这两个都无法隐藏下面的导航栏,而且在最新的sdk里面也没有SYSTEM_UI_FLAG_SHOW_FULLSCREEN的定义

4、。第二种就是在jni种通过fb0得到系统的分辨率,这个是真实的分辨率,这种方法需要apk有root或者graphics组权限,才能打开fb0,而且android4.0根据触摸屏类型是否使用外部显示分辨率,如果使用外部display的话,那么就不能用fb0的分辨率。为了解决这个问题,把整个inputtouch流程都看了一边。废话少说,进入正题。1androidinputtouch流程Androidinouttouch流程分两部分,一部分是从androidframework开始,如何读取touch设备的事件并分发

5、。一部分是从linux内核开始,如何从触摸屏读取触摸坐标并送给touch设备。2androidframework层2.1文件结构首先看看EventInput文件结构吧,在frameworks/base/services/input之下2.2模块介绍lEventhub它是系统中所有事件的中央处理站。它管理所有系统中可以识别的输入设备的输入事件,此外,当设备增加或删除时,EventHub将产生相应的输入事件给系统。EventHub通过getEvents函数,给系统提供一个输入事件流。它也支持查询输入设备当前的状态

6、(如哪些键当前被按下)。而且EventHub还跟踪每个输入调入的能力,比如输入设备的类别,输入设备支持哪些按键。lInputReaderInputReader从EventHub中读取原始事件数据(RawEvent),并由各个InputMapper处理之后输入对应的inputlistener.InputReader拥有一个InputMapper集合。它做的大部分工作在InputReader线程中完成,但是InputReader可以接受任意线程的查询。为了可管理性,InputReader使用一个简单的Mutex来

7、保护它的状态。InputReader拥有一个EventHub对象,但这个对象不是它创建的,而是在创建InputReader时作为参数传入的。lInputDispatcherInputDispatcher负责把事件分发给输入目标,其中的一些功能(如识别输入目标)由独立的policy对象控制。lInputManagerInputManager是系统事件处理的核心,它虽然不做具体的事,但管理工作还是要做的,比如接受我们客户的投诉和索赔要求,或者老板的出气筒。InputManager使用两个线程:1)InputRea

8、derThread叫做"InputReader"线程,它负责读取并预处理RawEvent,appliespolicy并且把消息送入DispatcherThead管理的队列中。2)InputDispatcherThread叫做"InputDispatcher"线程,它在队列上等待新的输入事件,并且异步地把这些事件分发给应用程序。InputReaderThread类与InputDispatcherThr

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
相关文章
更多
相关标签