【朝花夕拾】Android自定义View篇之(八)多点触控(上)MotionEvent简介

       在前面的文章中,介绍了不少触摸相关的知识,但都是基于单点触控的,即一次只用一根手指。但是在实际使用App中,常常是多根手指同时操作,这就需要用到多点触控相关的知识了。多点触控是在Android2.0开始引入的,在现在使用的Android手机上都是支持多点触控的。本文将对常见的多点触控相关的重点知识进行总结,并使用多点触控来实现一些常见的效果,从而达到将理论知识付诸实践的目的。

 

一、触摸事件感应的产生原理

       在介绍多点触控前,我们先了解一下现在手机屏幕触摸事件感应的原理。 当前手机使用的屏幕一般都是电容式触摸屏,我们看看百度百科中对此的介绍:

       电容式触摸屏技术是利用人体的电流感应进行工作的。当手指触摸在屏幕上时,由于人体电场,用户和触摸屏表面形成以一个耦合电容,对于高频电流来说,电容是直接导体,于是手指从接触点吸走一个很小的电流。这个电流分别从触摸屏的四角上的电极中流出,并且流经这四个电极的电流与手指到四角的距离成正比,控制器通过对这四个电流比例的精确计算,得出触摸点的位置。 (摘自百度百科【电容式触摸屏】)

       电容式触摸屏感应触摸事件,和人体电场相关,这也就是为什么用手指触摸时屏幕能有响应,但其它物体却不行的原因。而早期的手机采用的是电阻式触摸屏,当屏幕受到压力时电阻有变化,通过电阻来感应触摸,所以除了手指外,其它物体也能让屏幕产生响应。电容式触摸屏支持多点触控,但电阻式触摸屏不能。

 

二、触摸事件与底层

       在文章【【朝花夕拾】Android自定义View篇之(六)Android事件分发机制(中)从源码分析事件分发逻辑及经常遇到的一些“诡异”现象】的开头我们介绍过“事件的前世今生”,事件是从硬件感应,然后经过驱动、框架,然后到达View的。前面讲过的内容这里不再赘述,我们看看下面这份截图:

【朝花夕拾】Android自定义View篇之(八)多点触控(上)MotionEvent简介

       这是MotionEvent类中跟踪与事件相关的主要方法的结果,几乎都是很快就调到了native层。通过这些方法,我们可以直观感受到事件与底层的密切联系。

 

三、事件输入设备以及MotionEvent中对应的事件说明

       随着Android系统版本的提升,以及Android硬件设备的发展,事件输入设备和对应的事件特点也在不断发生着变化。轨迹球出现在很早的手机中,后来去掉了;多点触控也是在Android2.0开始支持的......咱们这里不一一列举,当然,大家也不关心这些细节。这里我汇总了目前我知道的一些事件输入设备,以及在MotionEvent中封装的对应的响应事件。

       如下表格显示了它们大概的对应关系,由于我使用过的设备有限,所以有些对应设备的对应关系不太确定,下表中在括号内加了“?”。注意我这里的措词是“大概”,因为下面有些对应关系可能有交叉的情况等。本文关注的重点是多点触控,其它的这里咱们只做了解即可。

输入设备   响应事件   事件常量值   事件说明  

单点触控/
触控笔/
多点触控/
橡皮檫(?)

  ACTION_DOWN   0   第一个手指初次接触到屏幕时触发。  
ACTION_UP   1   手指在屏幕上滑动时触发,会多次触发。  
ACTION_MOVE   2   最后一个手指离开屏幕时触发。  
ACTION_CANCEL   3   当前的手势被中断时触发。  
ACTION_OUTSIDE   4   事件发生在UI边界之外时触发。  
ACTION_POINTER_DOWN   5   有非主要的手指按下(即按下之前已经有手指在屏幕上)。  
ACTION_POINTER_UP   6   有非主要的手指抬起(即抬起之后仍然有手指在屏幕上)。  
鼠标/轨迹球(?)   ACTION_HOVER_MOVE   7   指针在窗口或者View区域移动,但没有按下。  
ACTION_SCROLL   8   滚轮滚动,可以触发水平滚动或垂直滚动  
ACTION_HOVER_ENTER   9   指针移入到窗口或者View区域,但没有按下。  
ACTION_HOVER_EXIT   10   指针移出到窗口或者View区域,但没有按下。  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgywjd.html