安卓用一个32位的整型int标识一次触摸事件。
getAction()是完整地获取这个整型int。
getActionMasked()是获取这个整形int的低8位。masked有掩盖的意思,即掩盖住不重要的部分,不看了,就只有我们需要的部分。
最后8位代表这次触摸事件的类型。即我们熟悉的ACTION_DOWN、ACTION_UP、ACTION_MOVE之类的。
对于单指操作而言,getAction()和getActionMasked()的结果并没有区别,是一样的。
但对于多指操作而言,它们则代表不同的含义。
触摸事件的整形int的低9~16位的含义是指代第几只手指。
举个栗子:
手指一的ACTION_MOVE事件为 0x0001 (00000000 00000000 00000000 00000002)
手指二的ACTION_MOVE事件为 0x0101 (00000000 00000000 00000001 00000002)
手指三的ACTION_MOVE事件为 0x0101 (00000000 00000000 00000002 00000002)
所以在多指操作中我们就不能仅仅使用getAction()来判断事件类型,而需要使用getActionMasked()来截取事件类型信息进行判断
理所当然地,既然有截取事件类型的方法,肯定就有获取事件是第几根手指的方法,即getActionIndex(),它和getActionMasked()相似,是截取低9~16位(先用0xff00和整形相与,再将结果右移8位)
其实还是比较好理解的,如果对于位运算符和位移操作不理解,需要先去找这部分的相关知识进行学习。