2012-06-18 26 views
0

我編寫了用於放大/縮小的代碼。它可以工作,但即使用一個手指放大/縮小,它應該只能用2個手指(多點觸控)工作。任何知道爲什麼?即使在單點觸控交互中也會發生多點觸控變焦

boolean surfaceTouchEvent(MotionEvent event) { 
     pointNum=event.getPointerCount(); 
     switch (event.getAction() & MotionEvent.ACTION_MASK) { 
     case MotionEvent.ACTION_DOWN: 
     //User is pressing on finger 
     x0=event.getX(0); 
     y0=event.getY(0); 
     mode = false; //DRAG 
     break; 
     case MotionEvent.ACTION_POINTER_DOWN: 
     x1=event.getX(0); 
     x2=event.getX(1); 
     y1=event.getY(0); 
     y2=event.getY(1); 
     z4 = dist(x1, y1, x2, y2); 
     mode = true; // pinch 
     break; 
    case MotionEvent.ACTION_UP: 
    mode = false; 
     case MotionEvent.ACTION_POINTER_UP: 
     // User is released one of the fingers. 
     mode = false; 

     break; 
     case MotionEvent.ACTION_MOVE: 
     if (mode = false) { 
     // x1=event.getX(0)-x0; 
      //y1=event.getY(0)-y0; 
     } 
     if (mode = true) { 
      x1=event.getX(0); 
      x2=event.getX(1); 
      y1=event.getY(0); 
      y2=event.getY(1); 
      float z3 = dist(x1, y1, x2, y2); 
      if (z3 > z4) { 
      zoom += 0.1; 
      } 
      else if (z3 < z4) { 
      zoom -= 0.1; 
      } 
     } 
     break; 
     } 
     return super.surfaceTouchEvent(event); 
    } 

我編輯如下代碼,但這次是不工作的,至少第一代碼的作品,但變焦反應奇怪,請大家幫忙

float x1,x2,y1,y2 = -1; 
    boolean surfaceTouchEvent(MotionEvent event) { 
     pointNum=event.getPointerCount(); 
     if (pointNum >=2) { 
     x1=event.getX(0); 
     x2=event.getX(1); 
     y1=event.getY(0); 
     y2=event.getY(1); 
     z4 = dist(x1, y1, x2, y2); 
     if (z3 > z4) { 
      zoom += z3/z4; 
     } 
     else if (z3 < z4) { 
      zoom -= z3/z4; 
     } 
     } 
     else { 
     return false; 
     } 
     z3 = z4; 
     return super.surfaceTouchEvent(event); 
    } 

回答

0

你應該只有在執行該有不止一個手指。 只需將您的代碼之前,如果添加此:

boolean surfaceTouchEvent(MotionEvent event) { 
    pointNum=event.getPointerCount(); 
    if(pointNum >= 2) { 
    // your code here 
    } else { 
    return false; 
    } 
} 
+0

,但首先我需要保存舊的位置,然後以比較新的舊的位置(當兩個手指移動變焦)來定義縮放的事情。在這種情況下,我應該在哪裏定義舊職位? – matarsak

+0

將它們定義爲實例變量lastX1,lastX2和lastY1,lastY2,並使用值爲-1的值初始化它們,這些值不能通過觸摸屏分配。在你的代碼中分配它們。 – Tim