マルチタッチイベントを受け取るには

画面の拡大・縮小などに使われるピンチ操作などを実装しようとする場合、2点以上マルチタッチイベントを受け取る必要があります。

調べたところによるとマルチタッチを受け取るにはgetActionメソッドで受け取ったアクションにMotionEvent.ACTION_MASKでビット積をとってマスクする必要があります。

public boolean onTouchEvent(MotionEvent event)
{
    switch(event.getAction() & MotionEvent.ACTION_MASK){
    case MotionEvent.ACTION_POINTER_DOWN:
        /** 2点以上の処理*/
        break;
    }
}

2点以上タッチされたかを感知するには以前はACTION_POINTER_2_DOWNACTION_POINTER_3_DOWNなどを使っていましたが、現在では非推奨になっていてACTION_POINTER_DOWNを使う方が良いみたいです。

そして各点の座標を調べるには次のように処理します。

 
public boolean onTouchEvent(MotionEvent event)
{
    switch(event.getAction() & MotionEvent.ACTION_MASK){
    case MotionEvent.ACTION_POINTER_DOWN:
        /** 2点以上の処理*/
        break;
    case MotionEvent.ACTION_MOVE:
        for(int i = 0; i < event.getPointerCount(); ++i){
            Log.i("TAG", 
                "x[" + i + "] = " + event.getX(i)
                "y[" + i + "] = " + event.getY(i));
        }
        break;
    }
}

getXgetYにポインターのインデックスを渡せばそのインデックス番のポインターの位置が分かります。

以上、マルチタッチイベントを受け取る方法でした。

関連項目
プライバシーポリシー