3

複数のビューで異なるジェスチャーを検出する必要があります。私のビューは、タップ、ダブルタップ、およびドラッグ イベントを受け取ることができる必要があります。Gesture Detector を試しましたが、私の実装ではグローバル ジェスチャ イベントしか表示されず、これらのイベントを特定のビューに関連付けることができません。

私の activity.onCreate で:

    dthandler = new DoubleTapHandler();
    mDetector = new GestureDetector(this,dthandler);
    gestureListener = new View.OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        Log.d("myLog","touch");
        mDetector.onTouchEvent(event);
        return false;
    }
};

私のアクティビティでは、dispatchTouch 関数をオーバーライドします。

@Override 
      public boolean dispatchTouchEvent(MotionEvent me){ 
        this.mDetector.onTouchEvent(me);
       return super.dispatchTouchEvent(me); 
      }

これは、タッチイベントをビューに接続しようとする方法です:

prod.setOnTouchListener(this.gestureListener);

私の DoubleTapHandler:

public class DoubleTapHandler implements OnDoubleTapListener, OnGestureListener {
        private ProductView relatedView;

        @Override
        public boolean onDoubleTapEvent(MotionEvent e) {   
            Log.d("myLog", "onDoubleTapEvent");
            Log.d("myLog",""+e.getSource());
            return false;                      
        }

        @Override
        public boolean onDoubleTap(MotionEvent e) {
            Log.d("myLog", "onDoubleTap"+relatedView);
            return false;
        }

        @Override
        public boolean onSingleTapConfirmed(MotionEvent e) {
            Log.d("myLog", "singletap");
            return false;
        }
}

誰にもアドバイスはありますか?ありがとう!

4

2 に答える 2

2

クレイジーな考え。それらすべてをラップするいくつかのビューでグローバル ジェスチャ リスナーを作成します。そして、すべてのビューで手動で dispatchTouchEvent を呼び出します。トリッキーですが、うまくいきます。

次に、ビューに onTouchEventListenrer を追加します。

そして、これが機能しない場合、適切な方法は次のとおりです。自分でジェスチャーリスナーを実装し(タップとドラッグはそれほど難しくないはずです)、インターセプトタッチイベントを操作します

于 2015-01-21T22:52:03.737 に答える
2

それを機能させるには、ジェスチャーを各ビューに直接アタッチすると、さまざまな実装を行うことができます。

于 2011-05-27T09:43:18.010 に答える