2

デバイスに複数の指がある場合、onTouch-listener はすべての指に対して 1 回実行されますか、それともイベント (指を下ろす、移動するなど) ごとに 1 回実行され、すべてのアクティブなタッチ ポインターが含まれますか?

で、もし

(e.getAction() & MotionEvent.ACTION_MASK == MotionEvent.ACTION_MOVE)

どのポインターが現在動いているかを知るにはどうすればよいですか?

final int pointerIndex = e.getActionIndex();
pointerID = e.getPointerId(pointerIndex);

何らかの理由で常に 0 を返します (MotionEvent.ACTION_MOVE の間)。

4

1 に答える 1

3

まず、次のイベントを取得します。

  1. MotionEvent.ACTION_DOWN
    画面に最初に触れたとき
  2. MotionEvent.ACTION_POINTER_DOWN
    すべての非一次接触
  3. MotionEvent.ACTION_UP
    最後のタッチアップに
  4. MotionEvent.ACTION_POINTER_UP
    すべての非一次修正について
  5. MotionEvent.ACTION_MOVE
    触れた指のいずれかが
    ここに移動するたびに、すべての指を調べて、座標が変更されたかどうかを確認する必要があります

次のようにします。

@Override
public boolean onTouchEvent(MotionEvent ev)
{
    final int action = ev.getAction();
    final int pointerIndex = (action & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_SHIFT; //index of this pointer

    switch (action & MotionEvent.ACTION_MASK)
    {
        case MotionEvent.ACTION_DOWN:
            //your first touch on the screen
            break;

        case MotionEvent.ACTION_MOVE:
            //one of the touches has moved
            for (unsigned int i = 0; i < ev.getPointerCount(); i++)
            {
                //The pointer id is ev.getPointerId(i);
                //for loop through all touches
            }
            break;

        case MotionEvent.ACTION_UP:
            //your last touch has gone up
            break;

        case MotionEvent.ACTION_POINTER_DOWN:
            //non-primary pointer has gone down
            break;

        case MotionEvent.ACTION_POINTER_UP:
            //non-primary pointer has gone up
            break;
        }
    }

    return true;
}

これが少し役立つことを願っています:)

于 2013-01-07T18:32:41.597 に答える