event.getAction()&MotionEvent.ACTION_MASK的原因
2014-10-24 14:54
337 查看
看到下面代码中用了AND位运算是为了什么呢?
首先来看看这些常量的值
看到这么多16进制有没有怕呢。。。我数学不太好,看着有点怕呢~
先做做十六进制AND运算
来看看ACTION_MASK & ACTION_POINTER_2_DOWN 即 0x000000ff & 0×00000105
换成二进制 1111 1111(2) & 1 0000 0110(2) = 0110(2) = 0×00000006
update:上面换算错了。。囧,应该是 1111 1111(2) & 1 0000 0101(2) = 0101(2) = 0×00000005
如果不会换算,试试用计算器啦。。(掩面,我也是用计算器,快速计算的方法是把16进制的每一位扩展为4位的二进制)
可以看到,and运算的结果总是小于等于0x000000ff,那就是说and之后,无论你多少根手指加进来,都是会ACTION_POINTER_DOWN或者ACTION_POINTER_UP
补充一下,当第二个手指触摸屏幕时,event.getAction()的值是0×00000105,第三个手指触摸是0×00000205,放开相应的手指数量会返回相应的值。
public boolean onTouchEvent(MotionEvent event) { int action = event.getAction(); switch (action & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: showMsg("ACTION_DOWN" + action); break; case MotionEvent.ACTION_UP: showMsg("ACTION_UP" + action); break; case MotionEvent.ACTION_POINTER_UP: showMsg("ACTION_POINTER_UP" + action); break; case MotionEvent.ACTION_POINTER_DOWN: showMsg("ACTION_POINTER_DOWN" + action); break; } return super.onTouchEvent(event); } |
ACTION_MASK 0x000000ff ACTION_DOWN 0x00000000 ACTION_UP 0x00000001 ACTION_MOVE 0x00000002 ACTION_POINTER_DOWN 0x00000005 ACTION_POINTER_UP 0x00000006 ACTION_POINTER_1_DOWN 0x00000005 ACTION_POINTER_1_UP 0x00000006 ACTION_POINTER_2_DOWN 0x00000105 ACTION_POINTER_2_UP 0x00000106 ACTION_POINTER_3_DOWN 0x00000205 ACTION_POINTER_3_UP 0x00000206 |
先做做十六进制AND运算
来看看ACTION_MASK & ACTION_POINTER_2_DOWN 即 0x000000ff & 0×00000105
换成二进制 1111 1111(2) & 1 0000 0110(2) = 0110(2) = 0×00000006
update:上面换算错了。。囧,应该是 1111 1111(2) & 1 0000 0101(2) = 0101(2) = 0×00000005
如果不会换算,试试用计算器啦。。(掩面,我也是用计算器,快速计算的方法是把16进制的每一位扩展为4位的二进制)
可以看到,and运算的结果总是小于等于0x000000ff,那就是说and之后,无论你多少根手指加进来,都是会ACTION_POINTER_DOWN或者ACTION_POINTER_UP
补充一下,当第二个手指触摸屏幕时,event.getAction()的值是0×00000105,第三个手指触摸是0×00000205,放开相应的手指数量会返回相应的值。
相关文章推荐
- android多点触控统一的原理(使用 event.getAction()&MotionEvent.ACTION_MASK的原因)
- android多点触控统一的原理(使用event.getAction()&MotionEvent.ACTION_MASK的原因)
- android多点触控统一的原理(使用 event.getAction()&MotionEvent.ACTION_MASK的原因)
- android多点触控统一的原理(使用 event.getAction()&MotionEvent.ACTION_MASK的原因)
- Androin学习笔记五十六: android多点触控统一的原理(使用 event.getAction()&MotionEvent.ACTION_MASK的原因)
- android多点触控统一的原理(使用 event.getAction()&MotionEvent.ACTION_MASK的原因)
- android多点触控统一的原理(使用 event.getAction()&MotionEvent.ACTION_MASK的原因)
- 多点触控事件处理 ev.getAction() & MotionEvent.ACTION_MASK
- Android 多点触控实践解析及加入MotionEvent.ACTION_MASK的原因
- android MotionEvent getAction,getActionMasked,getActionIndex区别
- 多点触控之MotionEvent.ACTION_MASK作用
- 多点触控之MotionEvent.ACTION_MASK作用
- 多点触控之MotionEvent.ACTION_MASK作用
- ServletActionContext.getServletContext().getRealPath("/upload");myeclipseyeclipse获取路径不一样的原因
- 多点触控之MotionEvent.ACTION_MASK作用
- struts2开发环境中,enctype="multipart/form-data"上传文件时,request.getInputStream()为null的原因
- android sdk小于2.2 event.getActionMasked()兼容报错的问题
- getevent & setevent
- MOTIONEVENT的GETX()和GETRAWX()和VIEW的GETLEFT()3个方法的区别
- u3d中 rect[2] == rt->GetGLWidth() && rect[3] == rt->GetGLHeight()错误的原因及解决方法