java - Android 多点触控 - 中指 ACTION.MOVE 被忽略

标签 java android multi-touch

以下代码是我一直在尝试用于多点触控的代码。手指一设置正确并在我拖动手指时四处移动。当我触摸并松开手指时,第二个手指出现并消失,但它永远不会移动。知道有什么问题吗?

我已阅读 developers blog我仍然不明白问题是什么。

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        int action = event.getAction() & MotionEvent.ACTION_MASK;
        int pointerIndex = (event.getAction() & MotionEvent.ACTION_POINTER_ID_MASK) >> MotionEvent.ACTION_POINTER_ID_SHIFT;
        int pointerId = event.getPointerId(pointerIndex);
        switch (action) {
        case MotionEvent.ACTION_DOWN:
        case MotionEvent.ACTION_POINTER_DOWN:
            if (pointerId == 0)
            {
                fingerOneDown = 1;
                fingerOneX = event.getX(pointerIndex);
                fingerOneY = event.getY(pointerIndex);
            }
            if (pointerId == 1)
            {
                fingerTwoDown = 1;
                fingerTwoX = event.getX(pointerIndex);
                fingerTwoY = event.getY(pointerIndex);
            }
            break;

        case MotionEvent.ACTION_UP:          
        case MotionEvent.ACTION_POINTER_UP:
        case MotionEvent.ACTION_CANCEL:
            if (pointerId == 0)
            {
                fingerOneDown = 0;
                fingerOneX = event.getX(pointerIndex);
                fingerOneY = event.getY(pointerIndex);
            }
            if (pointerId == 1)
            {
                fingerTwoDown = 0;
                fingerTwoX = event.getX(pointerIndex);
                fingerTwoY = event.getY(pointerIndex);
            }
            break;

        case MotionEvent.ACTION_MOVE:
            if (pointerId == 0)
            {
                fingerOneDown = 1;
                fingerOneX = event.getX(pointerIndex);
                fingerOneY = event.getY(pointerIndex);
            }
            if (pointerId == 1)
            {
                fingerTwoDown = 1;
                fingerTwoX = event.getX(pointerIndex);
                fingerTwoY = event.getY(pointerIndex);
            }

            break;
        }
        return true;
    }

最佳答案

没关系。我修好了它。由于某种奇怪的原因,ACTION.MOVE 事件总是作为 pointerId 为零。因此,您始终必须重新计算事件中的 pointerId,如下所示:

       case MotionEvent.ACTION_MOVE:

        int pointerCount = event.getPointerCount();
        for(int i = 0; i < pointerCount; ++i)
        {
            pointerIndex = i;
            pointerId = event.getPointerId(pointerIndex);
            Log.d("pointer id - move",Integer.toString(pointerId));
            if(pointerId == 0)
            {
                fingerOneDown = 1;
                fingerOneX = event.getX(pointerIndex);
                fingerOneY = event.getY(pointerIndex);
            }
            if(pointerId == 1)
            {
                fingerTwoDown = 1;
                fingerTwoX = event.getX(pointerIndex);
                fingerTwoY = event.getY(pointerIndex);
            }
        }
        break;

关于java - Android 多点触控 - 中指 ACTION.MOVE 被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9028357/

相关文章:

android - HttpURLConnect - 使用 GSON 流的带有 JSON 的 Http PUT 不发送内容

android - Samsung Camera SDK是用来扩展Camera2 API的吗?

android:ACTION_UP 和 ACTION_POINTER_UP 之间的区别

multi-touch - Phaser 多点触控(在笔记本电脑触控板上)

java - Spring数据查询转neo4j查询

java - 将对象的 ArrayList 列表转换为对象 [][]

Java simple-json 解析器弄乱了变量

Android TranslateAnimation 以像素为单位的特定位置

Android:AndroidPlot 中的触摸事件期间应用程序崩溃

java - Spring Data Mongo - 继承和可嵌入