Android - обнаружить жест на разных взглядах - PullRequest
3 голосов
/ 27 мая 2011

Мне нужно обнаружить различные жесты на более чем одном просмотре. Мои представления должны иметь возможность получать события касания, двойного касания и перетаскивания. Я попробовал Gesture Detector, но моя реализация показывает мне только глобальные события жестов, и я не могу связать эти события с определенным представлением.

в моей деятельности. Создать:

    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); 
      }

вот как я пытаюсь связать touchevent с моими представлениями:

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;
        }
}

У кого-нибудь есть совет? Спасибо!

Ответы [ 2 ]

2 голосов
/ 27 мая 2011

Чтобы это работало, прикрепляйте жесты непосредственно к каждому представлению, и тогда у вас могут быть различные реализации.

1 голос
/ 22 января 2015

Сумасшедшая мысль. Создайте глобальный слушатель жестов для некоторого представления, которое объединяет их все. И вручную вызовите dispatchTouchEvent для всех ваших просмотров. Это сложно, но это может сработать.

Затем добавьте onTouchEventListenrer в свои представления.

И если это не сработает, то правильным способом было бы: реализовать слушателей жестов самостоятельно (касания и перетаскивания не должны быть такими сложными) и работать с перехватывать события касания .

...