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