Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 多点触控安卓-一个手指使用一半屏幕,另一个手指使用一半屏幕_Android_Multi Touch - Fatal编程技术网

Android 多点触控安卓-一个手指使用一半屏幕,另一个手指使用一半屏幕

Android 多点触控安卓-一个手指使用一半屏幕,另一个手指使用一半屏幕,android,multi-touch,Android,Multi Touch,嗨,我正在做一个分屏游戏,我想不出如何把控制装置放下。现在,如果只有一个人在触摸屏幕,它们工作得很好,但一旦有多个人在触摸屏幕,第一个触摸的人是唯一能够控制屏幕的人。所以我需要实现多点触摸。我不知道怎么做,一旦一个手指向下控制屏幕上半部分的对象,另一个手指可以向下控制屏幕下半部分。我该怎么做 编辑: 我改了,但还是不行,有人能告诉我为什么吗 我的尝试无效: public boolean onTouch(View v, MotionEvent event){ //needs mul

嗨,我正在做一个分屏游戏,我想不出如何把控制装置放下。现在,如果只有一个人在触摸屏幕,它们工作得很好,但一旦有多个人在触摸屏幕,第一个触摸的人是唯一能够控制屏幕的人。所以我需要实现多点触摸。我不知道怎么做,一旦一个手指向下控制屏幕上半部分的对象,另一个手指可以向下控制屏幕下半部分。我该怎么做

编辑: 我改了,但还是不行,有人能告诉我为什么吗

我的尝试无效:

  public boolean onTouch(View v, MotionEvent event){
      //needs multitouch
      if(checkInGame()){

                if(event.getY() < this.getMeasuredHeight() / 2){  
                    pointerId1 = event.getPointerId(event.getActionIndex());
                }else{
                    pointerId2 = event.getPointerId(event.getActionIndex());    
                }

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

                    case MotionEvent.ACTION_MOVE:{

                        if(event.getPointerId(event.getActionIndex()) == pointerId1){  
                            Log.d("Touch","Move1");
                              int pointerIndex = event.getActionIndex();
                          int moveX = 0;
                          int moveY = 0;
                          moveX = (int) event.getX(pointerIndex) - sX;
                          moveY = (int) event.getY(pointerIndex) - sY;

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

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


                    }
                      case MotionEvent.ACTION_DOWN: {

                            if(event.getPointerId(event.getActionIndex()) == pointerId1){
                                Log.d("Touch","Top1");
                                int pointerIndex = event.getActionIndex();
                                sX = (int) event.getX(pointerIndex);
                                sY = (int) event.getY(pointerIndex);
                            }else if(event.getPointerId(event.getActionIndex()) == pointerId2){
                                int pointerIndex = event.getActionIndex();
                                Log.d("Touch","Bottom1");
                                 sX2 = (int) event.getX(pointerIndex);
                                 sY2 = (int) event.getY(pointerIndex);
                            }
                            return true;
                        }

                      case MotionEvent.ACTION_POINTER_DOWN:{
                            if(event.getPointerId(event.getActionIndex()) == pointerId1){
                                Log.d("Touch","Top2");
                                int pointerIndex = event.getActionIndex();
                                sX = (int) event.getX(pointerIndex);
                                sY = (int) event.getY(pointerIndex);
                            }else if(event.getPointerId(event.getActionIndex()) == pointerId2){
                                int pointerIndex = event.getActionIndex();
                                Log.d("Touch","Bottom2");
                                 sX2 = (int) event.getX(pointerIndex);
                                 sY2 = (int) event.getY(pointerIndex);
                            }
                            return true;
                      }


                }
public boolean onTouch(视图v,运动事件){
//需要多点触摸
if(checkInGame()){
如果(event.getY()
你可能想通过它的ID来跟踪每个指针。在指针向下时,检查ID,这样你就知道ID为1的指针是控制对象1。读一下这篇Android博客文章,它可能会有帮助:

看,我读了几遍,我真的不太明白,但是如果你d一根手指向下,它可能有食指0和ID 0。然后添加另一根手指,它会变成食指1和ID 1。如果删除第一根手指,第二根手指会变成食指0,但其ID仍然为1。系统会以某种方式为您跟踪每个手指。您得到了什么logcat输出?问题在于
getActionIndex()
。该方法仅适用于操作指针向上或操作指针向下,否则它将只返回第一个指针,因为这是操作指针移动。您仍然可以使用
MotionEvent.getX(int pointerIndex)
获取每个指针的x和y。