没有合适的资源?快使用搜索试试~ 我知道了~
android4.0 input touch分析
3星 · 超过75%的资源 需积分: 0 8 下载量 131 浏览量
2013-09-17
17:56:36
上传
评论 1
收藏 775KB DOCX 举报
温馨提示
试读
45页
这是一篇android4.0下的input touchscreen流程分析文档,本文当详细分析如果加载input device,如何获得input event,如何分发input event
资源推荐
资源详情
资源评论
解析
前言:
在网上看到好多关于 流程分析,但是都不全,有的只是从 内
核那边分析,有的从 上层分析,而且分析的代码也比较老,都是在 以下,
最近在做 下的多点触摸以及校准程序,多点触摸的驱动很好写,在 内核里
面都有现成的例子,照着改就可以了。但是 下的校准程序比较复杂,一种是在
层进行,一种是在 内核层进行。
对于校准程序来说,需要全屏校准。但是在 下面,下面的导航栏是
画的,无法去掉,因此在校准程序里面通过 得到分辨率高度比实际的小,
差的那部分就是导航栏的高度。如果以小的高度进行校准,但使用实际的高度进行触摸坐
标到屏幕坐标转换,就会导致触摸点偏下的问题。
为了解决这个问题,在网上找了很多资料,第一种就是想办法在校准程序里面得到整
个屏幕的分辨率,进而让校准程序全屏显示,即把导航栏隐藏,在网上看到又网友用下面
例子实现:
//for phone
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
//for pad,View.SYSTEM_UI_FLAG_SHOW_FULLSCREEN= 4
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_SHOW_FULLSCREEN);
经 过 自 己 实 验 , 这 两 个 都 无 法 隐 藏 下 面 的 导 航 栏 , 而 且 在 最 新 的 里 面 也 没 有
SYSTEM_UI_FLAG_SHOW_FULLSCREEN 的定义。第二种就是在 jni 种通过 fb0 得到系统的分辨率,这
个是真实的分辨率,这种方法需要 apk 有 root 或者 graphics 组权限,才能打开 fb0,而且
android4.0 根据触摸屏类型是否使用外部显示分辨率,如果使用外部 display 的话,那么就
不能用 fb0 的分辨率。为了解决这个问题,把整个 input touch 流程都看了一边。废话少说,
进入正题。
1 android input touch 流程
流程分两部分,一部分是从 开始,如何读取 设
备的事件并分发。一部分是从 内核开始,如何从触摸屏读取触摸坐标并送给 设
备。
2 android framework 层
2.1 文件结构
首先看看 Event Input 文件结构吧,在 frameworks/base/services/input 之下
2.2 模块介绍
它是系统中所有事件的中央处理站。它管理所有系统中可以识别的输入设备的输入事件,
此外,当设备增加或删除时, 将产生相应的输入事件给系统。 通过
函数,给系统提供一个输入事件流。它也支持查询输入设备当前的状态(如哪
些键当前被按下)。而且 还跟踪每个输入调入的能力,比如输入设备的类别,
输入设备支持哪些按键。
从 中读取原始事件数据,并由各个
处理之后输入对应的 拥有一个 集合。它做的
大部分工作在 线程中完成,但是 可以接受任意线程的查询。
为了可管理性, 使用一个简单的 来保护它的状态。 拥
有一个 对象,但这个对象不是它创建的,而是在创建 时作为参
数传入的。
负责把事件分发给输入目标,其中的一些功能(如识别输入目标)由独
立的 对象控制。
是系统事件处理的核心,它虽然不做具体的事,但管理工作还是要做的,
比如接受我们客户的投诉和索赔要求,或者老板的出气筒。
使用两个线程:
) 叫 做 !! 线 程 , 它 负 责 读 取 并 预 处 理
, 并且把消息送入 管理的队列中。
") 叫做!!线程,它在队列上等待新的输入
事件,并且异步地把这些事件分发给应用程序。
类与 类不共享内部状态,所有的通信都
是 单 向 的 , 从 到 。 两 个 类 可 以 通 过
# 进行交互。
类从不与 $ 交互,而 # 负责执行所有与系统的外
部交互,包括调用 % 业务。
看看下图理解 下面几个模块的关系
2.3 线程创建
大家熟悉吧,它是 进程启动的,它的任务就是启动 里面很
多服务,并管理起来,如果大家不熟悉,请参考 启动流程分析
!"###!###$里面
%&& 调用
'"%()*+,'*$-
.+,' "))
%/. 0%1234% %451+4565)
/78$-
,' "0+9:;1+4 2690)$-
+,' !"###!####$ 里面
+,' 调用
+,%.+,%"))9,)8,'$-
"$-
接着调用
+,%&& 调用
+,' .+,' "0)<,)
=9,)8,'$-
接着在 +,' 里面调用
9,'.9,'")$-
至此我们创建了一个 ! 层 设备管理器
9,'!"###!####$ 里面
9,' 调用
>9"0)0)'?"$$-
从下面开始就进入 > 空间
4449,'"###!$里面
>9 对应 449,'4>9 调用
':>9,'.:>9,'"1!)1!)$-
在 :>9,' 里面调用
@=A=.="$-
9,'.9,'"=))$-
这个函数创建一个 对象,然后把它作为参数来创建 对象。特
别注意, 是在 &''里,具体在 里。 类在
里,这个类和 事件获取有关。
至此我们创建了一个 > 层 设备管理器,具体作用见上面说明
首先是去 ()*+++ 文件里面
,, 调用
剩余44页未读,继续阅读
资源评论
- _HERO_2014-04-24一般般而已呀,
yxj5421
- 粉丝: 1
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Screenshot_20240427_031602.jpg
- 网页PDF_2024年04月26日 23-46-14_QQ浏览器网页保存_QQ浏览器转格式(6).docx
- 直接插入排序,冒泡排序,直接选择排序.zip
- 在排序2的基础上,再次对快排进行优化,其次增加快排非递归,归并排序,归并排序非递归版.zip
- 实现了7种排序算法.三种复杂度排序.三种nlogn复杂度排序(堆排序,归并排序,快速排序)一种线性复杂度的排序.zip
- 冒泡排序 直接选择排序 直接插入排序 随机快速排序 归并排序 堆排序.zip
- 课设-内部排序算法比较 包括冒泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、归并排序和堆排序.zip
- Python排序算法.zip
- C语言实现直接插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序、归并排序、计数排序,并带图详解.zip
- 常用工具集参考用于图像等数据处理
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功