在ACTION_MOVE MotionEvents中,指针是否保证从低到高的id索引?

时间:2012-09-06 17:25:25

标签: android motionevent

我正在将基于触摸的交互记录到数据库中,并且无法记录所有指针。因此,当我处理MotionEvent中包含的指针(和历史指针)时,我只是忽略了某个索引之后的指针。但是,具有最低ID的指针对我来说是最相关的。是否可以安全地假设指针按指针id的顺序排序(索引),即使这些id不能保证从零开始?

测试表明这个假设是正确的,但我在文档中找不到任何验证。有人能够对此有所了解吗?

Android MotionEvent documentation开始,如何处理所有指针:

void printSamples(MotionEvent ev) {
    final int historySize = ev.getHistorySize();
    final int pointerCount = ev.getPointerCount();
    for (int h = 0; h < historySize; h++) {
        System.out.printf("At time %d:", ev.getHistoricalEventTime(h));
        for (int p = 0; p < pointerCount; p++) {
            System.out.printf("  pointer %d: (%f,%f)",
                ev.getPointerId(p), ev.getHistoricalX(p, h), ev.getHistoricalY(p, h));
        }
    }
    System.out.printf("At time %d:", ev.getEventTime());
    for (int p = 0; p < pointerCount; p++) {
        System.out.printf("  pointer %d: (%f,%f)",
            ev.getPointerId(p), ev.getX(p), ev.getY(p));
    }
 }

我的代码更改了行

final int pointerCount = ev.getPointerCount();

final int pointerCount = Math.min(ev.getPointerCount(), MAX_POINTER_COUNT);

有效地只获得每个指针循环中的第一个MAX_POINTER_COUNT个指针。我可以依赖那些指针ID最低的指针吗?

1 个答案:

答案 0 :(得分:0)

根据我的经验,指针的顺序是屏幕上的触摸顺序,因此第一个指针是第一个触摸,而第三个手指触摸同时是指针3。

因此,如果您只想限制为2或3个手指手势,则可以将Max指针设置为2或3。