8

ドキュメントには、それについて次のように書かれています。

ジェスチャは、最初のポインターが押された位置を提供する ACTION_DOWN のモーション イベントで始まります。追加のポインターが上下するたびに、フレームワークはそれに応じて ACTION_POINTER_DOWN または ACTION_POINTER_UP でモーション イベントを生成します。

だから私は自分の活動で onTouchEvent 関数のオーバーライドを行いました:

@Override
public boolean onTouchEvent(MotionEvent MEvent) 
{

    motionaction = MEvent.getAction();

    if(motionaction == MotionEvent.ACTION_DOWN)
    {
        System.out.println("DEBUG MESSAGE POINTER1 " + MEvent.getActionIndex() );
    }

    if(motionaction == MotionEvent.ACTION_POINTER_DOWN)
    {
        System.out.println("DEBUG MESSAGE POINTER2 "  + MEvent.getActionIndex() );
    }

}

残念ながら、2 番目の if は入力されません。アクティビティには 2 つのOnTouchListenerを持つ 2 つのビューが含まれています。アクティビティのビューがイベントを消費しない場合にのみonTouchEventが呼び出されることを知っているので、リスナーで false を返そうとしました。そのようにして、最初の指のタッチのみを認識できますが、これにより、リスナーが ACTION_UP イベントを受信するのを回避し、2 本目の指のタッチを認識できなくなります。また、リスナーで true を返そうとしましたが、手動で onTouchEvent 関数を呼び出した後、最初の指のタッチのみを認識できます。

私のコードで何が問題になっていますか?

4

1 に答える 1

19

あなたのコードには、次のようなマスキング操作が欠けていると思います。

switch (motionaction & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_POINTER_DOWN:
}

このコードは ACTION_POINTER_DOWN をチェックできるはずです。

幸運を祈ります。何が起こるか教えてください。

トミー・クウィー

于 2012-07-06T06:39:38.477 に答える