Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.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
Java Android多点触控仅适用于一根手指_Java_Android_Multi Touch - Fatal编程技术网

Java Android多点触控仅适用于一根手指

Java Android多点触控仅适用于一根手指,java,android,multi-touch,Java,Android,Multi Touch,我正在开发一款双人乒乓球游戏,希望能用一个手指控制蝙蝠。然而,我的问题是,它一次只响应屏幕上的一个手指。整个游戏在一个视图中运行。首先,在移动相应的蝙蝠之前,我先检查指针是否处于“活动”状态,然后再检查它是否出现在屏幕的顶部或底部。它工作正常,除了只有一个触摸寄存器。我的方法代码如下: // variables int _touchY = (int) event.getY(); boolean isTopSide = true; // test if motio

我正在开发一款双人乒乓球游戏,希望能用一个手指控制蝙蝠。然而,我的问题是,它一次只响应屏幕上的一个手指。整个游戏在一个视图中运行。首先,在移动相应的蝙蝠之前,我先检查指针是否处于“活动”状态,然后再检查它是否出现在屏幕的顶部或底部。它工作正常,除了只有一个触摸寄存器。我的方法代码如下:

    // variables
    int _touchY = (int) event.getY();
    boolean isTopSide = true;

    // test if motionEvent was on the top or bottom of the screen
    if (SCREEN_HEIGHT / 2 - _touchY < 0) {
        isTopSide = false;
    }

    switch (event.getActionMasked()) {

        case MotionEvent.ACTION_DOWN:
            _activePointer = event.getPointerId(0);
            break;

        case MotionEvent.ACTION_MOVE:
            if(_activePointer != INVALID_POINTER_ID) {
                if (isTopSide) { // top bat
                    _topBat.moveBat(event);
                } else { // bottom bat
                    _botBat.moveBat(event);
                }
            }
            if(_newPointer != INVALID_POINTER_ID){
                if (isTopSide) { // top bat
                    _topBat.moveBat(event);
                } else { // bottom bat
                    _botBat.moveBat(event);
                }
            }
            break;

        case MotionEvent.ACTION_UP:
            if(_activePointer != INVALID_POINTER_ID){
                _activePointer = INVALID_POINTER_ID;
            }
            break;

        case MotionEvent.ACTION_CANCEL:
            _activePointer = INVALID_POINTER_ID;
            break;

        case MotionEvent.ACTION_POINTER_UP:
            int pointerIndex = event.getActionIndex();
            int pointerId = event.getPointerId(pointerIndex);
            if(pointerId == _activePointer){
                _activePointer = INVALID_POINTER_ID;
            }

        case MotionEvent.ACTION_POINTER_DOWN:
            int newPointerIndex = event.getActionIndex();
            _newPointer = event.getPointerId(newPointerIndex);
            break;
    }

之所以只看到单个指针的值,主要是因为没有任何参数的
event.getY()
为您提供了第一个指针索引的位置,即使实际移动的指针是第二个指针

MotionEvent类包含所有活动指针的坐标

如果要获取第二个指针的位置,需要调用
event.getY(1)


您可能希望遍历所有活动点,通过
event.getPointerCount()
获取总计数,然后相应地发送事件。

为什么只看到单个指针的值,主要问题是因为
event.getY()
不带任何参数可为您提供第一个指针索引的位置,即使实际移动的指针是第二个指针

MotionEvent类包含所有活动指针的坐标

如果要获取第二个指针的位置,需要调用
event.getY(1)


您可能希望遍历所有活动点,通过
event.getPointerCount()
获取总计数,然后相应地发送事件。

为什么只看到单个指针的值,主要问题是因为
event.getY()
不带任何参数可为您提供第一个指针索引的位置,即使实际移动的指针是第二个指针

MotionEvent类包含所有活动指针的坐标

如果要获取第二个指针的位置,需要调用
event.getY(1)


您可能希望遍历所有活动点,通过
event.getPointerCount()
获取总计数,然后相应地发送事件。

为什么只看到单个指针的值,主要问题是因为
event.getY()
不带任何参数可为您提供第一个指针索引的位置,即使实际移动的指针是第二个指针

MotionEvent类包含所有活动指针的坐标

如果要获取第二个指针的位置,需要调用
event.getY(1)

您可能希望遍历所有活动点,通过
event.getPointerCount()
获取总计数,然后相应地发送事件

// touched
private static final int INVALID_POINTER_ID = -1;
private int _activePointer = INVALID_POINTER_ID;
private int _newPointer = INVALID_POINTER_ID;