私は、2 番目の指または人差し指の動きだけを記録する必要があるマルチタッチ プログラムに取り組んでいます。ドキュメントには、MotionEvent.ACTION_POINTER_INDEX_MASK と & it をアクションで使用し、INDEX_SHIFT でシフトして、上下に移動するようなアクションを行ったポインターを取得できると記載されています。しかし、このテクニックは移動中には機能しません。
特定のポインターだけで行われた移動アクションを検出できる方法はありますか?
どうも、
私は、2 番目の指または人差し指の動きだけを記録する必要があるマルチタッチ プログラムに取り組んでいます。ドキュメントには、MotionEvent.ACTION_POINTER_INDEX_MASK と & it をアクションで使用し、INDEX_SHIFT でシフトして、上下に移動するようなアクションを行ったポインターを取得できると記載されています。しかし、このテクニックは移動中には機能しません。
特定のポインターだけで行われた移動アクションを検出できる方法はありますか?
どうも、
はい、View
クラスで次のようなものを使用できます。
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getActionMasked()) {
case MotionEvent.ACTION_MOVE:
if(event.getPointerCount()>1){
//where 1 is the index of the second finger
final int Y = event.getY(1);
final int X = event.getX(1);
}
break;
}
}
そのため、動きを取得したい指に応じて、そのインデックスへの取得を設定できます。値は 0 (ダウンしている最初のポインター) からgetPointerCount()-1
. これを 2.2 Gingerbread でテストしたので、お役に立てば幸いです :)
どのポインターが変更されたかを確認することで、有効なポインター インデックスを取得できます。
private final int MAX_POINTER = 5; // 5 different touch pointers supported on most devices
private float mLastTouchPositionX[];
private float mLastTouchPositionY[];
@Override
public boolean onTouchEvent(MotionEvent aEvent)
int tActionIndex = aEvent.getActionIndex();
int tPointerCount = aEvent.getPointerCount();
/*
* Check which pointer changed on move
*/
if (tMaskedAction == MotionEvent.ACTION_MOVE) {
for (int i = 0; i < tPointerCount && i < MAX_POINTER; i++) {
if (mLastTouchPositionX[i] != aEvent.getX(i) || mLastTouchPositionY[i] != aEvent.getY(i)) {
mLastTouchPositionX[i] = aEvent.getX(i);
mLastTouchPositionY[i] = aEvent.getY(i);
// Found new action index
tActionIndex = i;
break;
}
}
}
...
}