最近在做一个 小应用, 涉及到的跟以前接触的 不太一样。 这次是 onTouchEvent 和 OnGestureListener接口的 结合, 本身继承SurfaceView...
拿出来跟大家讨论一下 看看有没有更好的办法!自己定义了好多 flag, 自己总觉得有更简洁的办法。。。
上码吧! 注释不多!重在意会蛤!
@Override public boolean onTouchEvent(MotionEvent event) { int pointerCounter = event.getPointerCount(); int action = (event.getAction() & event.getActionMasked()); gd.onTouchEvent(event); if( pointerCounter <= 2){ switch (action) { case MotionEvent.ACTION_DOWN: int X1 = (int) event.getX(0); int Y1 = (int) event.getY(0); this.checkCollection(X1, Y1); tempForId [0] = currentBallId; tempForCollision [0] = currentBallId; Log.e(TAG, "first===getX(0)===getY(0)===>DOWN" + X1 + ":" + Y1 + tempForCollision [0]); if(touched){ longFlag = true; secondTouched = false; firstTouchenCanMove = true; } break; case MotionEvent.ACTION_POINTER_DOWN: int X2 = (int) event.getX(1); int Y2 = (int) event.getY(1); if(touched & (pointerCounter > 1) ){ this.checkCollection(X2, Y2); tempForId [1] = currentBallId; Log.d(TAG, "second===getX(1)===getY(1)===>DOWN" + X2 + ":" + Y2); secondTouched = true; }else{ firstTouchenCanMove = false; secondTouched = false; } longFlag = false; break; case MotionEvent.ACTION_MOVE: if (firstTouchenCanMove) { X1 = (int) event.getX(0); Y1 = (int) event.getY(0); this.touchMoveBalls(tempForId [0], X1, Y1); this.tempMoveCollisionCheck(tempForCollision[0]); Log.d(TAG, "first===getX(0)===getY(0)===>MOVE" + X1 + ":" + Y1); if (secondTouched){ X2 = (int) event.getX(1); Y2 = (int) event.getY(1); this.touchMoveBalls(tempForId [1], X2, Y2); Log.e(TAG, "second===getX(1)===getY(1)===>MOVE" + X2 + ":" + Y2); }else{ secondTouched = false; touched = false; } } longFlag = false; afterMoveSendPdFlag = false; break; case MotionEvent.ACTION_POINTER_UP: secondTouched = false; touched = false; longFlag = false; firstTouchenCanMove = false; break; case MotionEvent.ACTION_UP: secondTouched = false; if (firstTouchenCanMove ) { if(afterMoveSendPdFlag){ if(pdSendCheckForLongTouch){ this.sendToPd(); Log.i(TAG, "first pointer======>up, SEND pd"); } } touched = false; afterMoveSendPdFlag = true; longFlag = false; pdSendCheckForLongTouch = true; secondTouched = false; firstTouchenCanMove = false; } break; }// close events switch loop }//end of if (pointerCounter <= 2) return true; //return to void onTouchEvents() }
@Override public void onLongPress(MotionEvent e) { // TODO Auto-generated method stub if (longFlag){// Log.d(TAG, "onLongPress"); pdSendCheckForLongTouch = false; Toast.makeText(this.myContext, "onLongPress", Toast.LENGTH_SHORT).show(); } }