1

タッチベースの対話をデータベースに記録していますが、すべてのポインターを記録する余裕はありません。したがって、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 を持つポインターを信頼できますか?

4

1 に答える 1

0

私の経験からすると、ポインターの順序は画面上のタッチの順序であるため、最初のポインターは最初のタッチであり、3 本目の指の同時タッチのようにポインター 3 です。

したがって、2 本または 3 本の指ジェスチャのみに制限したい場合は、最大ポインタを 2 または 3 に設定できます。

于 2012-09-06T17:33:59.910 に答える