【问题标题】:Multitouch zoom reacting even on single-touch interaction多点触控缩放甚至对单点触控交互也有反应
【发布时间】:2012-06-18 08:02:05
【问题描述】:

我为放大/缩小编写了这段代码。它可以工作,但即使用一根手指也可以放大/缩小,而它应该只能用两根手指(多点触控)工作。有人知道为什么吗?

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

【问题讨论】:

    标签: java android zooming multi-touch


    【解决方案1】:

    只有在有多个手指时才应执行此操作。 只需在您的代码之前添加此 if:

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

    【讨论】:

    • 但首先我需要保存旧位置,然后将旧位置与新位置进行比较(当两根手指移动进行缩放时)以定义缩放事物。在这种情况下,我应该在哪里定义旧职位?
    • 将它们定义为实例变量lastX1、lastX2和lastY1、lastY2,并用触摸屏无法赋值的-1等值对其进行初始化。在您的代码中分配它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多