2012-05-17 76 views
1

嗨在我的应用程序中,我有一个位置,我想要一个手指在上半部分来控制顶部的东西和底部的一个手指,以同时控制底部的东西。所以我试图实施多点触控,但我似乎无法得到正确的ACTION_MOVE。当我在屏幕上移动两个手指时,它只会首先移动触摸屏幕一侧的对象。我想知道为什么会出现这种情况?我的继承人代码:Android多点触控 - ACTION_MOVE多指针

public boolean onTouch(View v, MotionEvent event){ 
    //needs multitouch 
    if(checkInGame()){ 
     int pointerIndex = 0; 
      if(event.getY() < this.getMeasuredHeight()/2){ 
       pointerId1 = event.getPointerId(event.getActionIndex()); 
       pointerIndex = event.findPointerIndex(pointerId1); 
      }else{ 
       pointerId2 = event.getPointerId(event.getActionIndex());  
       pointerIndex = event.findPointerIndex(pointerId2); 
      } 

      switch(event.getAction() & MotionEvent.ACTION_MASK){ 

       case MotionEvent.ACTION_MOVE:{ 
        int numPointers = event.getPointerCount(); 

        for (int i = 0; i < numPointers; i++){ 
         if(event.getY(i) < this.getMeasuredHeight() /2){ 
          Log.d("Touch","Move1"); 
          int moveX = 0; 
          int moveY = 0; 
          moveX = (int) event.getX(i) - sX; 
          moveY = (int) event.getY(i) - sY; 

          ship1.setLoc(moveX, moveY); 
          sX = sX + moveX; 
          sY = sY + moveY; 
         }else{ 
          Log.d("Touch","Move2"); 
           int moveX = 0; 
           int moveY = 0; 
           moveX = (int) event.getX(i) - sX2; 
           moveY = (int) event.getY(i) - sY2; 

           ship2.setLoc(moveX, moveY); 
           sX2 = sX2 + moveX; 
           sY2 = sY2 + moveY; 
         } 
          return true; 
        } 

       } 
        case MotionEvent.ACTION_DOWN: { 

         if(event.getY(pointerIndex) < this.getMeasuredHeight() /2){ 
          Log.d("Touch","Top1"); 
          sX = (int) event.getX(pointerIndex); 
          sY = (int) event.getY(pointerIndex); 
         }else{ 
          Log.d("Touch","Bottom1"); 
          sX2 = (int) event.getX(pointerIndex); 
          sY2 = (int) event.getY(pointerIndex); 
         } 
         return true; 
        } 

        case MotionEvent.ACTION_POINTER_DOWN:{ 
         if(event.getY(pointerIndex) < this.getMeasuredHeight() /2){ 
          Log.d("Touch","Top2"); 
          sX = (int) event.getX(pointerIndex); 
          sY = (int) event.getY(pointerIndex); 
         }else{ 
          Log.d("Touch","Bottom2"); 
          sX2 = (int) event.getX(pointerIndex); 
          sY2 = (int) event.getY(pointerIndex); 
         } 
         return true; 
        } 


      } 

回答

1

你return语句是for循环,所以它永远只能一次迭代里面。

+0

非常感谢 – MikeT