android多點觸控統一的原理(使用 event.getAction()&MotionEvent.ACTION_MASK的原因)
阿新 • • 發佈:2019-02-16
原文連結:http://blog.sina.com.cn/s/blog_82f01d350101gbbf.html
看到下面程式碼中用了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_MASK & ACTION_POINTER_2_DOWN 即0x000000ff & 0×00000105=0x0000005
可以看到,and運算的結果總是小於等於0x000000ff,那就是說and之後,無論你多少根手指加進來,都是會ACTION_POINTER_DOWN或者ACTION_POINTER_UP