0

zoom in/out 用にこのコードを書きました。動作しますが、指 2 本 (マルチタッチ) でのみ動作するはずですが、指 1 本でもズームイン/ズームアウトします。なぜ知っていますか?

    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);
    }
4

1 に答える 1

0

これは、指が複数ある場合にのみ実行してください。コードの前にこれを追加するだけです:

boolean surfaceTouchEvent(MotionEvent event) {
  pointNum=event.getPointerCount();
  if(pointNum >= 2) {
    // your code here
  } else {
    return false;
  }
}
于 2012-06-18T08:04:44.333 に答える