java - Android MultiTouch 仅适用于一根手指

标签 java android multi-touch

我正在开发一款两人乒乓球游戏,希望用一根手指控制每只球棒。然而,我的问题是它一次只响应一根手指在屏幕上。整个游戏在一个 View 中运行。首先,我检查指针是否处于“Activity ”状态,然后检查它是否出现在屏幕的顶部或底部,然后再移动相应的 bat 。除了只有一次触摸记录外,它工作正常。我的方法代码如下:

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

相关全局代码

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

最佳答案

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

MotionEvent 类包含所有 Activity 指针的坐标。

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

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

关于java - Android MultiTouch 仅适用于一根手指,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24026296/

相关文章:

java - 导入错误 : Org. Hibernate.SessionFactory 等

java - 如何在 java 控制台应用程序中加载网页并以编程方式单击该网页中的按钮?

java - 充气城堡没有这样的供应商异常

java - Joda Time 错误地解释了 AM/PM

java - Spring配置属性的初始化

android - 如何获取用户的电话名称(不是电子邮件)

android - 扫描二维码时将按钮设为不可点击

Android:由于某些布局属性,ImageView 高度限制

c++ - 在 Linux 上检测事件触摸屏(如果是多点触控)

swift - 如何在 UIBarButtonItems 和 UI 按钮上禁用多点触控?