public CMultiTouchManager(){} public void setOnCMultiTouchListener(OnCMultiTouchListener listener){ if (listener == null) { throw new IllegalStateException("Listener could be null !"); } this.cOnCMultiTouchListener=listener; } public CMultiTouchManager(OnCMultiTouchListener listener) { if (listener == null) { throw new IllegalStateException("Listener could be null !"); } this.cOnCMultiTouchListener = listener; }
public void putTouchEvent(MotionEvent event) { switch (event.getAction() & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: CMultiTouchManager.this.cOnCMultiTouchListener.onDown( event.getPointerId(event.getPointerCount() - 1), event.getX(), event.getY()); break; case MotionEvent.ACTION_POINTER_DOWN: CMultiTouchManager.this.cOnCMultiTouchListener.onDown( event.getPointerId(event.getPointerCount() - 1), event.getX(), event.getY()); break; case MotionEvent.ACTION_UP: CMultiTouchManager.this.cOnCMultiTouchListener.onUp( event.getPointerId(event.getPointerCount() - 1), event.getX(), event.getY()); break; case MotionEvent.ACTION_POINTER_UP: CMultiTouchManager.this.cOnCMultiTouchListener.onUp( event.getPointerId(event.getPointerCount() - 1), event.getX(), event.getY()); break; case MotionEvent.ACTION_MOVE: for (int i = 0; i < event.getPointerCount(); i++) { CMultiTouchManager.this.cOnCMultiTouchListener.onMove( event.getPointerId(i), event.getX(i), event.getY(i)); } break; } //在以上筛选代码中,down和up条件都是简单的只要确定在哪里按下跟抬起就可以。而每次move的条件都需要得到所有触摸点的坐标,才能及时调整,例如几个点同时滑动,需同时知道这几个点的滑动路径。
写好后,可以看到代码中有一个与运算(红字体部分)。目的是什么呢? 先看看各动作的全局变量的内容: public static final int ACTION_MASK = 255=0000000011111111; public static final int ACTION_DOWN = 0=00000000; public static final int ACTION_UP = 00000001; public static final int ACTION_MOVE = 00000010; public static final int ACTION_CANCEL = 00000011; public static final int ACTION_OUTSIDE = 00000100; public static final int ACTION_POINTER_DOWN = 00000101; public static final int ACTION_POINTER_1_DOWN = 00000101; public static final int ACTION_POINTER_2_DOWN = 100000101; public static final int ACTION_POINTER_3_DOWN = 1000000101; public static final int ACTION_POINTER_UP = 00000110; public static final int ACTION_POINTER_1_UP = 00000110; public static final int ACTION_POINTER_2_UP = 100000110; public static final int ACTION_POINTER_3_UP = 1000000110; 由以上可知,当ACTION_MASK&ACTION_POINTER_1/2/3_DOWN/UP=ACTION_MASK&ACTION_POINTER_DOWN/UP; 从而可将不同的触摸归类为一个类。