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


            }
4

1 回答 1

2

您的 return 语句位于 for 循环内,因此它只迭代一次。

于 2012-05-18T02:27:41.480 回答