ACTION_DONW
このポインタのindexは必ず0が割り当てられる
ACTION_POINTER_DOWN
indexが0以外のポインタがスクリーン上で検知された場合、呼び出される。割り当てられるindexは、
getActionIndex()
メソッドから取得が可能
ACTION_POINTER_UP
ポインタが離れた場合、呼び出される
ACTION_UP
最後のポインタがスクリーンを離れた場合、呼び出される
index
と
ID
を通して、個々の
ポインター
をトラックする
index
各
ポインター
情報は配列としてストアされている。
MotionEvent
で用意されている多くのメソッドは、このindex値を引き受ける
ID
各ポインタは、タッチイベントを通じて変わらないIDが割り当てられている
格納されるポインタの順序(index)は未定義であるが、IDは変わらない。
該当するポインタのindexが取得したい場合は、
findPointerIndex(ID)
メソッドを使うことができる。
// ポインタIDの保存。indexが0のポインタは、ACTION_DOWNイベントを発生させたポインタであることが保証されている
mActivePointerId = event.getPointerId(0)
val (x: Float, y: Float) = event.findPointerIndex(mActionPointerId).let {
event.getX(pointerIndex) to event.getY(pointerIndex)
MotionEvent その他のパラメーター
前回のタッチポイントを取得することができる
val prevX = event.getHistoricalX(0, event.historySize - 1)
event.historySize
ACTION_MOVE
の時のみ有効。それ以外のアクション時は常に0が返される
getHistoricalX(pointerIndex, position)
過去のタッチイベント情報の取得
MotionEvent.action vs MotionEvent.actionMasked
両方ともint値が返されるが、MotionEvent.action
の方には、ID値も添付される。
単純にアクションの判定を行う場合は、MotionEvent.actionMaskedの方を使用する。
when(event.actionMasked) {
MotionEvent.ACTION_DOWN -> { // このポインタのindexは必ず0が割り当てられる
MotionEvent.ACTION_POINTER_DOWN -> {
MotionEvent.ACTION_MOVE -> { ..
MotionEvent.ACTION_POINTER_UP -> { ..
MotionEvent.ACTION_UP -> { ..
タッチポイントの領域情報
タッチポイントの領域は、楕円で取得することができるので、その向き(orientation)を判定することができる
getToolMajor(pointerIndex)
楕円の長い方の長さ(float)
getToolMinor(pointerIndex)
楕円の短い方の長さ(float)
getOrientation(pointerIndex)
時計回りに楕円の向きを表す。0 radiansは、12時。-PI/2(指の場合は左側を向いている)からPI/2(指の場合は、右側を向いている)で表される。
https://developer.android.com/training/gestures/multi
https://stackoverflow.com/questions/17384983/in-android-what-is-the-difference-between-getaction-and-getactionmasked-in