今天晚上刚学习了一个多点触控的小程序,后面想对其做一个定制。在写的时候遇到很多问题,于是乎就查了一下API文档,又到网上查了一下高手的文章,最后自己又实践了一下。终于把多点触控事件监听的大概原理给弄清楚了。下面就写一下我个人对多点触控原理的理解:
一、MotionEvent事件的分类
触控分为两类:单点触控和多点触控。
1、如何获取触控事件信息?
安卓中使用32位(int)来存储触控事件的动作信息和触控索引。高16位暂时不用,后16位中高8位存储触控信息,低8位存储动作信息。
在安卓当中,使用ACTION_MASK、ACTION_MASK_SHIFT、ACTION_POINTER_INDEX_MASK、ACTION_POINTER_INDEX_SHIFT这四个属性来获得触控事件信息。
属性说明:
ACTION_MASK = 8(0x00ff) :动作信息掩码,用于截取目标动作信息;
ACTION_MASK_SHIFT = 8(0x00ff) : 截取动作信息时所需移位个数
ACTION_POINTER_INDEX_MASK =65280(0xff00) :高8位的位置信息掩码,用于截取索引信息
ACTION_POINTER_INDEX_SHIFT= 8(0x00ff) :截取触控索引时所需的移位个数
如果我们想要获取当前触控的全部信息,则使用
getAction();返回的是触控的所有信息
如果我们仅仅需要获取当前触控的动作信息,则使用
getActionMasked();返回当前触控的动作信息,即低8位的信息
如果我们想要获取的是当前触控的索引(比如:当你要监听是哪一个手指离开屏幕)
getActionIndex();可以达到效果,返回当前触控动作的索引
2、如何区别动作类型?
在一般的单点触控事件当中,我们只需要使用getAction()得到动作类型,再用ACTION_UP、ACTION_DOWN区分就可以达到目的。但是在多点触控的时候,则需要我
们使用getActionMasked()获得动作信息,然后再区分动作是属于那一类。