最近在做一个 小应用, 涉及到的跟以前接触的 不太一样。 这次是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();
}
}