2012-05-17 4 views
1

Привет, в моем приложении у меня есть место, где я хочу, чтобы палец был в верхней половине, чтобы контролировать что-то сверху и палец в нижней части, чтобы контролировать что-то на дне одновременно. Поэтому я попытался реализовать мультитач, но, похоже, я правильно понял ACTION_MOVE. Когда я перемещаю 2 пальца на экране, он перемещает объект только на сторону, которая сначала коснулась экрана. Мне было интересно, почему это так? Heres мой код:Android Multitouch - 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

Ваш оператор возврата находится внутри цикла for, поэтому он только раз итерации один раз.

+0

СПАСИБО ВАМ очень – MikeT

Смежные вопросы