MotionEvent介绍

1.1 事件类型

主要的事件类型有:

ACTION_DOWN: 表示用户开始触摸.

ACTION_MOVE: 表示用户在移动(手指或者其他)

ACTION_UP:表示用户抬起了手指

ACTION_CANCEL:表示手势被取消了,一些关于这个事件类型的讨论见:http://stackoverflow.com/questions/11960861/what-causes-a-motionevent-action-cancel-in-android

还有一个不常见的:

ACTION_OUTSIDE: 表示用户触碰超出了正常的UI边界.

但是对于多点触控的支持,Android加入了以下一些事件类型.来处理,如另外有手指按下了,

有的手指抬起来了.等等:

ACTION_POINTER_DOWN:有一个非主要的手指按下了.

ACTION_POINTER_UP:一个非主要的手指抬起来了

1.2 事件发生的位置,x,y

getRawX() 获得事件发生时,触摸的中间区域在屏幕的X.

getRawY() 获得事件发生时,触摸的中间区域在屏幕的X.

在多点触控中还可以通过:

getX(int pointerIndex) ,来获得对应手指事件的相对于父布局的位置. 获得Y轴用getY(int pointerIndex)

 

1.3  MotionEvent getActiongetActionMasked区别

mAction的低8位即0x000xff用来表示动作的类型信息。

例如:MotionEvent#ACTION_DOWN的值是 0,0x00

MotionEvent#ACTION_UP的值是 1,即0x01

Android是支持多点触控的MotionEvent带有触控点索引信息,在mAction的第二个8位中存储。例如,如果mAction的值是0x0000,则表示是第一个触控点的ACTION_DOWN操作。

如果mAction的值是0x0100呢,则表示是第二个触控点的ACTION_DOWN操作。

第三个的ACTION_DOWN呢?相信你可以推出来是0x0200

总而言之,mAction时的低8位(也就是0-7位)是动作类型信息。

mAction8-15位呢,是触控点的索引信息。(即表示是哪一个触控点的事件)。

 

动作类型只要0-255就可以了,动作类型,mPointer也是。这样做的好处,是节约内容。onMeasure中的MeasureSpec,也采用类似的存储方式。

 

1.4 多点触摸事件

·  ACTION_POINTER_DOWN:代表用户使用一个手指触摸到屏幕上,每次增加一个触摸点,就会收到ACTION_POINTER_DOWN。第一个触摸点是ACTION_ DOWN事件。

 

 ·  ACTION_POINTER_UP:代表用户的一个手指离开了触摸屏,但是还有其他手指还在触摸屏上。它与ACTION_UP的区别就是,它是在多个触摸点中的一个触摸点消失时(此时,还有触摸点存在,也就是说用户还有手指触摸屏幕)产生,而ACTION_UP最后一个触摸点消失时才会触发此事件。



 

 

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值