Android Multitouch - ACTION_MOVE с несколькими указателями

1

Привет, в моем приложении у меня есть место, где я хочу, чтобы палец в верхней половине контролировал что-то сверху и палец на нижней половине, чтобы контролировать что-то на дне одновременно. Поэтому я попытался реализовать мультитач, но, похоже, я правильно понял ACTION_MOVE. Когда я перемещаю 2 пальца на экране, он перемещает объект только на сторону, которая сначала коснулась экрана. Мне было интересно, почему это так? Вот мой код:

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


            }
Теги:
multi-touch

1 ответ

1
Лучший ответ

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню