皮皮网

【hl源码】【arbr情绪指标源码】【文档去水印源码】MotionEvent源码

时间:2024-12-23 06:18:45 来源:netty 游戏源码下载

1.MotionEvent的getAction、getActionMask和getActionIndex的区别

MotionEvent源码

hl源码

MotionEvent的getAction、getActionMask和getActionIndex的区别

hl源码        在很多自定义View的场景中,都有可能需要重写onTouchEvent、dispatchTouchEvent等方法,这些方法都传入一个MotionEvent对象,一般来说,我们需要通过该MotionEvent对象来获取当前的手势动作,然后判断Action_Down、Action_Move、Action_Up来执行不同的操作逻辑。

hl源码

        但是当我们看MotionEvent对象时,发现它有getAction、getActionMask和getActionIndex方法,而且在我们看第三方源码时,经常会看到这样的写法:

hl源码

        同时也会看到这样的写法:

hl源码

        这两种写法到底有什么区别呢?我们就来说一下MotionEvent的几种获取Action信息的方法。

hl源码

        Android用一个位的整数值来表示一个TouchEvent事件,低8位表示Touch事件的具体动作,例如按下、抬起、移动等动作。高8位表示Touch事件中多点触控的索引值。

hl源码

        从源码可以看出getActionMasked = getAction & MotionEvent.ACTION_MASK

hl源码

        而MotionEvent.ACTION_MASK 是一个常量值,值为0xff,所以getActionMasked方法只保留了低8位的信息,也就是说只保留了触摸的动作信息。

hl源码

        为什么看第三方源码时,有时候写getAction,有时候写getActionMasked呢?从上面的分析中可以看出来个所以然:

hl源码

        getAction表示触摸动作的原始位信息,当没有多点触控时,高8位即为0,这个时候getAction == getActionMasked。所以当我们确定我们自定义的View不会使用到多点触控时,就可以直接使用getAction来表示具体的触摸动作。但如果需要使用多点触控,或者是不确定后面会不会使用多点触控,则使用getActionMasked则是最保险的操作,所以我们经常看到下面这两种写法:

hl源码

        Android中是支持多点触控的,那么在高8位中是如何存储多点触控的索引信息的呢?举个例子来说:

hl源码

        如果从getAction方法中返回的值是0x,则表示是第一个触控点的ACTION_DOWN操作。高8位是0表示第一个触控点,低8位是0表示ACTION_DOWN操作。

hl源码

        同理,如果返回值是0x,则表示第二个触控点的ACTION_DOWN操作。

hl源码

        也就是说,getAction返回值的低8位表示触摸动作的类型信息,而高8位表示触控点的索引信息,也就是哪一个触控点的事件。

hl源码

hl源码

推荐资讯
研究發現:火星在遠古曾存在巨大湖泊和河流三角洲

研究發現:火星在遠古曾存在巨大湖泊和河流三角洲

pcdd菠萝源码_大菠萝源码

pcdd菠萝源码_大菠萝源码

欧巴源码_欧巴平台

欧巴源码_欧巴平台

悬浮窗源码_悬浮窗源码复制

悬浮窗源码_悬浮窗源码复制

乳癌佔女性好發癌症首位 HER2陽性治療難度高「1方法」助降低死亡率

乳癌佔女性好發癌症首位 HER2陽性治療難度高「1方法」助降低死亡率

陪护程序源码_陪护流程

陪护程序源码_陪护流程

copyright © 2016 powered by 皮皮网   sitemap