Android多点触控 - 带多个指针的ACTION_MOVE

时间:2012-05-17 21:21:22

标签: java android multi-touch

嗨,在我的应用程序中,我有一个地方,我需要一个手指在上半部分控制顶部的东西和一个手指在下半部分同时控制底部的东西。所以我试图实现多点触控,但似乎无法让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;
                  }


            }

1 个答案:

答案 0 :(得分:1)

你的return语句在for循环中,所以它只迭代一次。