1

Я разрабатываю приложение, которое содержит несколько фрагментов так же, как на картинке ниже:Android OnTouchEvent и OnClick событие

Picture 1

Нижняя точка зрения MainActivity, и есть несколько фрагментов выше MainActivity, которые могут содержать кнопок. Я хочу добавить фрагмент сверху, чтобы прослушать OnTouchEvents (жесты), но проигнорировать события onclick и передать события onclick фрагментам ниже.

Вот мои вопросы,

  1. Как я могу отличить onTouchEvent и onclick события в моих кодов?
  2. Как передать информацию о мероприятиях onclick на фрагменты внизу?
    Я видел, как некоторые люди предложили использовать onInterceptTouchEvent(), но я не уверен, применим ли это к моему делу, и я действительно не понимаю, как использовать onInterceptTouchEvent().

Update:
Я попытался переопределить boolean dispatchTouchEvent(MotionEvent ev), чтобы верхний фрагмент игнорировать событие щелчка, однако, так как первое событие прикосновения должно быть MotionEvent.ACTION_DOWN, кажется, что нет никакого способа для меня определить, щелкнет ли сенсорное событие.

Итак, есть ли другой способ сделать это?

ответ

0

От Documentation

Метод onInterceptTouchEvent() вызывается всякий раз, когда сенсорного события обнаруживается на поверхности ViewGroup, в том числе на поверхности своих детей. Если onInterceptTouchEvent() возвращает true, MotionEvent перехватывается, то есть он не будет передан дочернему, а скорее к методу onTouchEvent() родителя.

Метод onInterceptTouchEvent() дает родителям возможность увидеть любое событие касания до того, как его дети сделают. Если вы вернете true из onInterceptTouchEvent(), дочернее представление, которое ранее обрабатывало события касания, получает ACTION_CANCEL, а события с этой точки вперед отправляются методу onTouchEvent() родителя для обычной обработки. onInterceptTouchEvent() также может возвращать false и просто отслеживать события, когда они перемещаются вниз по иерархии представлений к их обычным целям, которые будут обрабатывать события со своим собственным onTouchEvent().

Таким образом, вы должны будете вернуть true/false (в методе onInterceptTouchEvent) в соответствии с логикой потока приложений. Если вы используете OnTouchListener, вы можете избежать использования OnClickListener. См. Пример в документации, чтобы лучше понять его.

0

This даст вам представление о том, как onTouch и onClick отличаются. Вы можете использовать пользовательские интерфейсы для передачи данных в нижний фрагмент для манипуляции

Смежные вопросы