码迷,mamicode.com
首页 > 其他好文 > 详细

event.getAction()&MotionEvent.ACTION_MASK的原因

时间:2014-10-24 15:59:53      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:style   io   java   sp   div   on   cti   代码   amp   

看到下面代码中用了AND位运算是为了什么呢?

	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

看到这么多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,放开相应的手指数量会返回相应的值。

event.getAction()&MotionEvent.ACTION_MASK的原因

标签:style   io   java   sp   div   on   cti   代码   amp   

原文地址:http://www.cnblogs.com/Free-Thinker/p/4048321.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!