安卓开发——MotionEvent中getAction、getActionMask、getActionIndex区别

Android用一个32位的整型值表示一次TouchEvent事件,低8位表示touch事件的具体动作,比如按下,抬起,滑动,还有多点触控时的按下,抬起,这个和单点是区分开的,下面看具体的方法: 
1 getAction:触摸动作的原始32位信息,包括事件的动作,触控点信息 
2 getActionMasked:触摸的动作,按下,抬起,滑动,多点按下,多点抬起 

3 getActionIndex:触控点信息

以下是getAction和getActionMasked在SDK中的定义:

public final int getAction() {

return mAction;

}

public final int getActionMasked() {

return mAction & ACTION_MASK;

}


如果mAction的值是在0x00到0xff之间的话。getAction()返回的值,和getActionMasked()的返回的值是一样的。

那什么时候返回的值是一样的呢?

即当mAction值大于0xff时,那什么时候会大于0xff呢?

这就是,当有多点触控时,mAction的低8位即0x00到0xff用来表示动作的类型信息。

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

      MotionEvent#ACTION_UP的值是 1,即0x01。

但是,我们知道Android是支持多点触控的,那么怎么知道这个一个MotionEvent是哪一个触控点触发的呢?那么就还需要MotionEvent带有触控点索引信息。

Android的解决方案是:在mAction的第二个8位中存储。

例如,如果mAction的值是0x0000,则表示是第一个触控点的ACTION_DOWN操作。

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

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

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

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


  • 10
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值