- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
多点触摸在 android 上的实现
框架图
多点触摸驱动的上报机制:
首先对上报参数进行定义:
input_set_abs_params(mcs_data.input, ABS_MT_POSITION_X, pdata-abs_x_min, pdata-abs_x_max, 0, 0);
input_set_abs_params(mcs_data.input, ABS_MT_POSITION_Y, pdata-abs_y_min, pdata-abs_y_max, 0, 0);
多点触摸驱动采用连续上报的机制,首先上报第一个手指的数据(ABS_MT_POSITION_X,ABS_MT_POSITION_Y),再发送(SYN_MT_REPORT)代表第一个手指数据发送结束,第二个手指同样也是(ABS_MT_POSITION_X,ABS_MT_POSITION_Y),再发送(SYN_MT_REPORT)依次类推最后一轮结束发送SYN_REPORT
下面是两指触摸的最小事件集 :
ABS_MT_POSITION_X
ABS_MT_POSITION_Y
SYN_MT_REPORT //上报第一指坐标数据
ABS_MT_POSITION_X
ABS_MT_POSITION_Y
SYN_MT_REPORT//上报第二指坐标数据
SYN_REPORT
协议解析
“触摸”这个词用来描述工具(手指,笔,等)直接接触触摸屏表面。
ABS_MT_TOUCH_MAJOR
接触面的长轴。
ABS_MT_TOUCH_MINOR
接触面的短轴,如果是圆形接触面,这个参数可以省略。
ABS_MT_WIDTH_MAJOR
接触工具的长轴。
ABS_MT_WIDTH_MINOR
接触工具的切面的短轴,如果是圆形,此参数可以省略。
以上宏的具体位置参照input.h
Android 的中间层:
同样在android 的中间层也定义了与内核相应的软件位参考(RawInputEvent.java),那么android的是如何区分多点触摸和单点触摸的呢?具体实现参照(EventHub.cpp),列举代码如下:
int EventHub::open_device(const char *deviceName)
{
厖厖厖厖?vent
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(It is a multi-touch screen!);
}
//single-touch?
else if (test_bit(BTN_TOUCH, key_bitmask)
test_bit(ABS_X, abs_bitmask)
test_bit(ABS_Y, abs_bitmask)) {
device-classes |= CLASS_TOUCHSCREEN;
// LOGI(It is a single-touch screen!);
}
厖厖厖f (..
}
既然知道了是多点触摸还是单点触摸android在InputKeyQueue.java 中把获得的数据重新打包成应用层可以识别的event具体实现参考该文件的mThread 线程,该线程主要就是不断的获得kenel上报的数据通过InputDevice.java 中的generateAbsMotion()完成对多点数据到event的转换。这样后面的处理就由中间层完成。
应用层
在应用层我们只要重载OnTouchListener 接口我们就可以获得触摸事件的event。代码参考如下:
import android.view.MotionEvent;
import android.view.View.OnTouchListener;
public class Touch extends Activity implements OnTouchListener {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layo
您可能关注的文档
- 夏季湿热体内易积毒 对症排毒不伤身.doc
- 夕卡岩识别.doc
- 外力理论.原创.docx
- 外向型企业产品国际竞争力的调查和的分析.doc
- 外地员工探亲休假管理制度.doc
- 外来人口归属感构建.doc
- 外来人员入库登记表.doc
- 外来人员重庆落户相关解答.docx
- 外来务工人员子女自卑心理健康教育案例.doc
- 外来流动人口.doc
- 专题06 经济体制(我国的社会主义市场经济体制)-五年(2020-2024)高考政治真题分类汇编(解析版).docx
- 专题11 世界多极化与经济全球化-5年(2020-2024)高考1年模拟政治真题分类汇编(解析版).docx
- 专题03 经济发展与社会进步-5年(2020-2024)高考1年模拟政治真题分类汇编(浙江专用)(解析版).docx
- 专题09 文化传承与文化创新-5年(2020-2024)高考1年模拟政治真题分类汇编(北京专用)(原卷版).docx
- 5年(2020-2024)高考政治真题分类汇编专题08 社会进步(我国的个人收入分配与社会保障)(原卷版).docx
- 专题07 探索世界与把握规律-5年(2020-2024)高考1年模拟政治真题分类汇编(解析版).docx
- 5年(2020-2024)高考政治真题分类汇编专题06 经济体制(我国的社会主义市场经济体制)(原卷版).docx
- 专题11 全面依法治国(治国理政的基本方式、法治中国建设、全面推进依法治国的基本要求)-五年(2020-2024)高考政治真题分类汇编(解析版).docx
- 专题17 区域联系与区域协调发展-【好题汇编】十年(2015-2024)高考地理真题分类汇编(解析版).docx
- 专题01 中国特色社会主义-5年(2020-2024)高考1年模拟政治真题分类汇编(原卷版).docx
文档评论(0)