看到下面代码中用了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的原因的更多相关文章

  1. 多点触控之MotionEvent.ACTION_MASK作用

    ACTION_MASK在Android中是应用于多点触摸操作,字面上的意思大概是动作掩码的意思吧. 在onTouchEvent(MotionEvent event)中,使用switch (event. ...

  2. 触摸事件【MotionEvent】简介

    MotionEvent简介 当用户触摸屏幕时,将创建一个MontionEvent对象,MotionEvent包含了关于发生触摸的位置.时间信息,以及触摸事件的其他很多细节. Android 将所有的输 ...

  3. 札记:android手势识别,MotionEvent

    摘要 本文是手势识别输入事件处理的完整学习记录.内容包括输入事件InputEvent响应方式,触摸事件MotionEvent的概念和使用,触摸事件的动作分类.多点触摸.根据案例和API分析了触摸手势T ...

  4. 触摸事件 Touch MotionEvent ACTION

    MotionEvent简介 当用户触摸屏幕时,将创建一个MontionEvent对象,MotionEvent包含了关于发生触摸的位置.时间信息,以及触摸事件的其他细节. 获取MontionEvent对 ...

  5. Android 手势&触摸事件 MotionEvent

    1.http://blog.csdn.net/omg_2012/article/details/7881443 这篇相当好啊 2.http://blog.csdn.net/android_tutor/ ...

  6. android 开发 View _14 MotionEvent和事件处理详解,与实践自定义滑动条View

    转载https://blog.csdn.net/huaxun66/article/details/52352469 MotionEvent MotionEvent对象是与用户触摸相关的时间序列,该序列 ...

  7. Android 简述touch事件中的MotionEvent

    有关touchEvent的事件里都有一个 MotionEvent 參数,以下来简介一下它的属性的一些含义和使用的方法 通常单指操作时,一般例如以下: switch (event.getAction() ...

  8. Cocos2dx3.11.1Android播放视频,后台 黑屏,无法记忆播放bug修改

    /* * Copyright (C) 2006 The Android Open Source Project * Copyright (c) 2014 Chukong Technologies In ...

  9. 转载爱哥自定义View系列--Paint详解

    上图是paint中的各种set方法 这些属性大多我们都可以见名知意,很好理解,即便如此,哥还是带大家过一遍逐个剖析其用法,其中会不定穿插各种绘图类比如Canvas.Xfermode.ColorFilt ...

随机推荐

  1. ant打包命令

    学习ant打包命令.发布到以上tomcat还未做集成部署,无法添加到jenkins中. http://blog.csdn.net/telnetor/article/details/7015935 ht ...

  2. js动态新增组合Input标签

    var x = 1; function addlink() { var linkdiv = document.getElementById("add1_0"); if (linkd ...

  3. (转)jquery.validate.js 的 remote 后台验证

    之前已经有一篇关于jquery.validate.js验证的文章,还不太理解的可以先看看:jQuery Validate 表单验证(这篇文章只是介绍了一下如何实现前台验证,并没有涉及后台验证remot ...

  4. PHP Socket编程起步

    让我们以一个简单的例子开始---一个接收输入字符串,处理并返回这个字符串到客户端的TCP服务.下面是相应的代码: PHP 代码: ) or die("Could not read input ...

  5. 在iptables和selinux中放行smb服务

    配置selinux [root@localhost samba]# getsebool -a | grep samba 查找selinux中对samba的限制项samba_domain_control ...

  6. 如何安装Git到MAC OS X

    这里介绍两种方式:一,使用Git command-line二,使用GUI工具SourceTree,功能很强大,很方便 在进行安装前,要说一下,Git和SVN一样,都需要创建一个服务器的,他们都可以创建 ...

  7. json数据返回

    <script type="text/javascript"> function xmlpage(){ var xhr=new XMLHttpRequest(); xh ...

  8. SQL IN BETWEEN操作符

    IN 操作符 IN 操作符允许我们在 WHERE 子句中规定多个值. SQL IN 语法 SELECT column_name(s) FROM table_name WHERE column_name ...

  9. zepto源码研究 - zepto.js-3 (常用的工具)

    pluck: /** * 根据是否存在此属性来获取当前集合,返回一组属性值 * @param property * @returns {*} */ pluck: function(property){ ...

  10. 武汉科技大学ACM:1006: 我是老大

    Problem Description 今年是2021年,正值武汉科技大学 ACM俱乐部成立10周年.十周年庆祝那天,从ACM俱乐部走出去的各路牛人欢聚一堂,其乐融融.庆祝晚会上,大家纷纷向俱乐部伸出 ...