Adroid 触摸屏设备
发布日期:2021-09-29 04:02:27 浏览次数:7 分类:技术文章

本文共 5007 字,大约阅读时间需要 16 分钟。

分享一下我老师大神的人工智能教程!零基础,通俗易懂!

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

1. 触摸屏设备分类

1.1 多点触摸

满足以下两个条件为多点触摸设备:

1)输入设备驱动报告了ABS_MT_POSITION_XABS_MT_POSITION_Y存在

2)输入设备没有任何手柄按钮

1.2 单点触摸

满足以下两个条件为单点触摸设备:

1)输入设备不被归类为多点触摸设备

2)输入设备报告存在ABS_X和ABS_Y绝对轴,以及存在BTN_TOUCH按键码

1.3 输入设备配置文件

        所有内置的触摸设备应该有输入设备的配置文件(.idc, input device configuration files).如果输入设备配置文件不存在,系统将选择一个通用的触摸设备配置做为默认配置。这些默认配置不是专门为内置触摸设备设计的,有可能导致工作不正常。

当输入设备配置(idc)被加载之后,系统将把输入设备分为触摸屏(touch screen),触摸板(touch pad)或指针设备(pointer device).

1)触摸屏:使用它,可以直接操作屏幕上的对象。

2)触摸板:它提供绝对的定位信息给触摸区域内的应用程序。

3)指针设备:使用它,通过光标间接操作屏幕上的对象。手指为多点触摸指针手势,其它工具,如铁笔,被解释为使用绝对位置。

 

以上三类设备的分类规则如下:

1)如果.idc中设置了touch.deviceType属性,则设备类型被设置为它所指定的设备类型(如:touchScreen)

2)如果输入设备通过EVIOCGPROP ioctl报告了存在INPUT_PROP_DIRECT输入属性,则此设备类型被设置为触摸屏。

3)如果输入设备通过EVIOCGPROP ioctl报告了存在INPUT_PROP_POINTER输入属性,则此设备类型被设置为指针设备。

4)如果输入设备报告了存在REL_X和REL_Y相对轴,则设备类型被设置为触摸板。

5)如果不满足以上条件,则设备类型被设置为指针设备。

 2. 按钮

        按钮是可选控制,应用程序使用它执行其这功能。触摸设备上的按钮功能类似于鼠标按钮,主要被指针触摸设备或铁笔使用。

支持的按钮如下:

BTN_LEFT: 被映射为: MotionEvent.BUTTON_PRIMARY.

BTN_RIGHT: 被映射为: MotionEvent.BUTTON_SECONDARY.
BTN_MIDDLE: 被映射为: MotionEvent.BUTTON_MIDDLE.
BTN_BACK and BTN_SIDE:被映射为:MotionEvent.BUTTON_BACK. 按此按钮也生成一个按键:KeyEvent.KEYCODE_BACK.
BTN_FORWARD and BTN_EXTRA: 被映射为: MotionEvent.BUTTON_FORWARD. 按此按钮也生成一个按键:KeyEvent.KEYCODE_FORWARD.
BTN_STYLUS: 被映射为:MotionEvent.BUTTON_SECONDARY.
BTN_STYLUS2: 被映射为:MotionEvent.BUTTON_TERTIARY.

3. 工具和工具类型

        一个工具是一个用于与触摸设备进行交互的手指、铁笔或其它设备。一些触摸设备可以区别不同的触摸工具类型。Android支持以下触摸工具类型:

BTN_TOOL_FINGER andMT_TOOL_FINGER: 被映射为MotionEvent.TOOL_TYPE_FINGER.

BTN_TOOL_PEN andMT_TOOL_PEN: 被映射为MotionEvent.TOOL_TYPE_STYLUS.

BTN_TOOL_RUBBER: 被映射为MotionEvent.TOOL_TYPE_ERASER.

BTN_TOOL_BRUSH: 被映射为MotionEvent.TOOL_TYPE_STYLUS.

BTN_TOOL_PENCIL: 被映射为MotionEvent.TOOL_TYPE_STYLUS.

BTN_TOOL_AIRBRUSH: 被映射为MotionEvent.TOOL_TYPE_STYLUS.

BTN_TOOL_MOUSE: 被映射为MotionEvent.TOOL_TYPE_MOUSE.

BTN_TOOL_LENS: 被映射为MotionEvent.TOOL_TYPE_MOUSE.

BTN_TOOL_DOUBLETAP,BTN_TOOL_TRIPLETAP, andBTN_TOOL_QUADTAP: 被映射为MotionEvent.TOOL_TYPE_FINGER.

4. 盘旋 vs. 触摸工具

        工具与触摸设备接触或在触摸设备上一定范围内盘旋。不是所有的触摸设备都能识别触摸工具在触摸设备上盘旋。如基于射频的手写笔数字化仪,当一个工具在其上面一定范围内盘旋时,它可以检测到。

        InputReader模块负责区分触摸工具中哪些是盘旋工具。同样,触摸工具(touching tools)和盘旋工具(hovering tools)以不同的方式报告给应用程序。

        触摸工具通过触摸事件(touch events)报告给应用程序,如:MotionEvent.ACTION_DOWN,MotionEvent.ACTION_MOVE,MotionEvent.ACTION_DOWN,MotionEvent.ACTION_POINTER_DOWN andMotionEvent.ACTION_POINTER_UP。

   盘旋工具通过通用的运动事件(generic motion events)报告给应用程序,如:MotionEvent.ACTION_HOVER_ENTER,MotionEvent.ACTION_HOVER_MOVE andMotionEvent.ACTION_HOVER_EXIT.   

5. 触摸设备驱动需求

       1) 触摸设备驱动应当只需要注册轴、与轴对应的键值和真正支持的按钮。注册过多的轴或键值可能会迷惑设备分类算法或导致系统不能正确地检测设备的能力。

         比如:如果设备驱动报告了BTN_TOUCH键值, Android系统将认为BTN_TOUCH总是被用于指示触摸工具是否真正地接触触摸屏或仅仅在上方盘旋。

        2) 单点触摸(Single-touch)设备支持以下Linux输入事件:       

  • ABS_X: (必须) :报告工具的x坐标
  • ABS_Y: (必须) :报告工具的y坐标
  • ABS_PRESSURE: (可选): 报告触摸工具顶尖处的压力或触摸接触的信号强度。
  • ABS_TOOL_WIDTH: (可选): 报告接触部分区域,或接触宽度或工具本身的宽度。
  • ABS_DISTANCE: (可选):报告从触摸设备表面到工具的距离
  • ABS_TILT_X: (可选): 报告工具沿触摸设备表面X轴的倾斜
  • ABS_TILT_Y: (可选):  报告工具沿触摸设备表面Y轴的倾斜.
  • BTN_TOUCH: (必须) :指示工具是否接触触摸设备.
  • BTN_LEFT, BTN_RIGHT, BTN_MIDDLE, BTN_BACK, BTN_SIDE, BTN_FORWARD, BTN_EXTRA, BTN_STYLUS, BTN_STYLUS2: (可选):  报告按钮状态.
  • BTN_TOOL_FINGER, BTN_TOOL_PEN, BTN_TOOL_RUBBER, BTN_TOOL_BRUSH, BTN_TOOL_PENCIL, BTN_TOOL_AIRBRUSH, BTN_TOOL_MOUSE, BTN_TOOL_LENS, BTN_TOOL_DOUBLETAP, BTN_TOOL_TRIPLETAP, BTN_TOOL_QUADTAP: (可选): 报告工具类型.

      3) 多点触摸(Multi-touch)设备支持以下Linux输入事件:      

  • ABS_MT_POSITION_X: (必须): 报告工具的X坐标
  • ABS_MT_POSITION_Y: (必须): 报告工具的X坐标
  • ABS_MT_PRESSURE: (可选): 报告触摸工具顶尖处的压力或触摸接触的信号强度
  • ABS_MT_TOUCH_MAJOR: (可选): 报告接触面积或接触面的长轴
  • ABS_MT_TOUCH_MINOR: (可选): 报告接触面的短轴。如果ABS_MT_TOUCH_MAJOR 报告接触面积,且此参数不应该使用。
  • ABS_MT_WIDTH_MAJOR: (可选): 报告接触工具本身的面积,或接触工具本身的长轴。如果接触工具的尺寸未知,则不应该使用此参数。
  • ABS_MT_WIDTH_MINOR: (可选): 报告接触工具本身的短轴,如果ABS_MT_WIDTH_MAJOR报告了面积区域, 或接触工具的尺寸未知,则不应该使用此参数。
  • ABS_MT_ORIENTATION: (可选):报告工具的方向.
  • ABS_MT_DISTANCE: (可选):  报告从触摸设备表面到工具的距离.
  • ABS_MT_TOOL_TYPE: (可选): 报告工具类型为:MT_TOOL_FINGER 或 MT_TOOL_PEN.
  • ABS_MT_TRACKING_ID: (可选): 报告工具的跟踪.
  • ABS_MT_SLOT: (可选): 报告工具的slot id,当使用Linux多点协议B.参考其文档获取更多信息。 
  • BTN_TOUCH: (必须) : 指示工具是否接触触摸设备.
  • BTN_LEFT, BTN_RIGHT, BTN_MIDDLE, BTN_BACK, BTN_SIDE, BTN_FORWARD, BTN_EXTRA, BTN_STYLUS, BTN_STYLUS2: (可选): 报告按钮状态
  • BTN_TOOL_FINGER, BTN_TOOL_PEN, BTN_TOOL_RUBBER, BTN_TOOL_BRUSH, BTN_TOOL_PENCIL, BTN_TOOL_AIRBRUSH, BTN_TOOL_MOUSE, BTN_TOOL_LENS, BTN_TOOL_DOUBLETAP, BTN_TOOL_TRIPLETAP, BTN_TOOL_QUADTAP: (可选): 报告工具类型

      4) 如果单点触摸和多点触摸的轴都定义了,则只有多点协议的轴被使用,单点触摸的轴则被忽略。

      5) ABS_X, ABS_Y, ABS_MT_POSITION_X andABS_MT_POSITION_Y 轴的最小值和最大值以设备表面具体的单位(如像素)定义了活动区域的边界。对于触摸屏,活动区域描述了触摸设备真正覆盖显示部分的区域。

      6) 在Android4.0中,触摸屏驱动需要修改以与Linux输入协议规范兼容。

     下列变化可能需要:

          1) 当一个工具变成不活动时(如手指抬起) ,在随后的multi-touch sync report它不应该出现;当所有的工具不活动时(如所有的手指抬起),驱动应该发送一个空的sync report包,如:SYN_MT_REPORT紧跟一个SYN_REPORT。

          以前的Android版本期望报告一个up事件(通过发送一个pressure值为0) 。旧的操作方式与Linux input协议规范不兼容,所以不再使用。             

     2) 物理压力或信号强度信息应该使用ABS_MT_PRESSURE报告。

            以前的Android版本从ABS_MT_TOUCH_MAJOR获取压力信息。旧的操作方式与Linux input协议规范不兼容,所以不再使用。

     3) 触摸尺寸信息通过ABS_MT_TOUCH_MAJOR报告。

      以前的Android版本从ABS_MT_TOOL_MAJOR获取触摸尺寸信息。旧的操作方式与Linux input协议规范不兼容,所以不再使用。

      触摸设备驱动不再需要Android定制化。通过标准的Linux input协议,Android可以支持大量的触摸设备,且不用修改驱动。

 

 

 参考:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

           

给我老师的人工智能教程打call!

这里写图片描述

转载地址:https://blog.csdn.net/hddghhfd/article/details/84062353 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Unity3D无缝场景切换解决方案 - 简单场景切换
下一篇:H 265/HEVC Codec 编解码 MP4 和 TS

发表评论

最新留言

很好
[***.229.124.182]2024年03月24日 08时14分05秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

技校毕业是什么学历_中等职业学校是什么_中等职业学校毕业是什么学历 2019-04-21
2压缩备份数据库_MySQL数据备份与恢复(二) xtrabackup工具 2019-04-21
英特尔cpu发布时间表_被嘲讽的英特尔核显,强大能力其实超乎你的想象 2019-04-21
chi2inv函数 matlab_MATLAB概率和统计(2) 2019-04-21
lisp修改上一个图素_在Windows上安装Haskell 2019-04-21
ad19 导出step 没有pcb_几款主流PCB软件哪个最好用,你用过几款? 2019-04-21
json mysql 字段 默认值_Newtonsoft.Json 六个超简单又实用的特性,值得一试 【上篇】... 2019-04-21
ocdma相干非相干_《Acconeer 60GHz脉冲相干雷达芯片:A111》 2019-04-21
修改表格字体颜色_Excel技巧:Excel如何修改字体颜色 2019-04-21
native react 变颜色 点击_React Native主动更改StackNavigator标头颜色 2019-04-21
prism项目搭建 wpf_WPF MVVM使用prism4.1搭建 2021-06-24
python发微信红包群_用Python实现微信自动化抢红包,再也不用担心抢不到红包了... 2021-06-24
python中func自定义函数_Python函数之自定义函数&作用域&闭包 2019-04-21
wget连接指定端口_端口通不通 telnet wget ssh 2019-04-21
eureka 调用服务_Spring Cloud微服务架构从入门到会用(二)—服务注册中心Eureka... 2019-04-21
easyexcel 工具类_问了个在阿里的同学,他们常用的15款开发者工具! 2019-04-21
mysql统计结果大于0时返回true_mysql表查询练习 2019-04-21
c语言对结构体排序中间变量,求助:c语言怎么实现结构体的排序? 总是弄不对啊... 2019-04-21
c语言宏定义只能在最前面吗,C语言宏定义注意事项 2019-04-21
android悬浮窗服务卡死,Android 悬浮窗兼容问题谈 2019-04-21