2012年11月13日火曜日

Android - マルチタッチと ACTION_MOVE

久しぶりにマルチタッチイベントを処理していてはまったこと。

ev.getActionMasked() == ACTION_MOVE の場合は

pointerIndex = ev.getActionIndex()
pointerId = ev.getPointerId(activePointerIndex);

が 0 になる。

つまり、「どの指が動いたか」という事を識別できない。
移動量とかを使いたい場合、イベントが起こる毎に、ID と 座標を対応付けて保存する必要があるので結構面倒くさい。移動先の座標を使うだけなら、下のようにループで全部のタッチ情報を処理すれば、無駄はあるけどそこまで大変ではない。


case MotionEvent.ACTION_MOVE:
int count = ev.getPointerCount();
boolean alreadyMoved = false;
for (int c = 0; c < count; c++){
 int pointerId = ev.getPointerId(c);
 float x = ev.getX(c);
 float y = ev.getY(c);
 ...
}
break;

0 件のコメント:

コメントを投稿