マルチタッチ イベントが原因で、指がまだ押されているときにタッチ インデックスが解放されるという問題が発生しています。
私の Java ラッパー コードを以下に貼り付けます。この関数は、activePointer 値を配列インデックスとして使用して、配列にアップ/ダウン状態を格納する C++ 関数に activePointer 整数を渡します。ダウン イベントは配列値を true に設定し、アップ イベントは配列値を false に設定します。
動作は次のとおりです。
- 1 本の指が押された場合、タッチ インデックス 0 は true です。
- 2 本の指が押されている場合、タッチ インデックス 0 と 1 はどちらも true です。
- 次に 2 番目の指を離すと、タッチ インデックス 0 が true になり、タッチ インデックス 1 が false になります (予想どおり)。
- 代わりに、1 番目の指が離され、2 番目の指が触れたままになっている場合、タッチ インデックス 0 と 1 の両方が false になります。タッチ インデックス 0 は false で、タッチ インデックス 1 は true のままだと思います。
これは私のJavaラッパーコードです:
@Override
public boolean onTouchEvent(MotionEvent event) {
Integer activePointer = (event.getAction() >> MotionEvent.ACTION_POINTER_ID_SHIFT);
Float x = event.getX(activePointer);
Float y = event.getY(activePointer);
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_POINTER_DOWN:
// Log.i("touchtest", "action_down " + activePointer.toString() +
// "(" + x + "," + y + ")");
androidRenderer.touch(x, y, activePointer);
break;
case MotionEvent.ACTION_MOVE:
// Log.i("touchtest", "action_move " + activePointer.toString() +
// "(" + x + "," + y + ")");
androidRenderer.move(x, y, activePointer);
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_POINTER_UP:
// Log.i("touchtest", "action_up " + activePointer.toString() + "("
// + x + "," + y + ")");
androidRenderer.up(x, y, activePointer);
break;
}
return true;
}
ドキュメントhereを読みましたが、あまり明確ではありません。
私は関数をいじりましたevent.findPointerIndex
が、実際に行っていることのパターンを推測できませんでした。
これがまれな問題だとは想像できません。これについての経験のある人がアドバイスを提供できますか? ありがとうございました。