Подтвердить что ты не робот

Поймать событие onTouch родителем, обработать его и передать детям

Я попытался понять, как Android ручка коснуться события и немного запутался. Из того, что я понимаю, событие touch отправляется в корневой режим и переходит к детям. У меня есть FrameLayout, который является контейнером для Fragment. Первый фрагмент представляет собой ScrollView, второй - некий Gallery (HorizontalListView), а последний - также FrameLayout. Каждый раз только один фрагмент в макете. То, что я хочу сделать, - это определить пользовательские подсказки на экране для использования в приложении. Я хочу подсчитать удары и сделать что-то после некоторого количества проверок.

Я попытался поместить OnTouchListener в начало FrameLayout, но он не вызывается, когда дочерним является ScrollView или Gallery. Я попытался вернуть false, а также true в конце onTouch, но я получаю тот же результат - он никогда не вызывается.

Как я могу это сделать? Я просто хочу "прозрачно" обрабатывать события касания и передавать их, как я даже не прикасался к ним.

4b9b3361

Ответ 1

Я понимаю, что он действительно идет в другом направлении. Взгляды на ребенка запускают свое событие сначала (вроде). Корневой вид вызывает его dispatchTouchEvent(), который передает событие до детей onTouchEvent(), а затем, в зависимости от того, вернутся ли они true или false, вызывается родительский onTouchEvent().

Обычное решение для перехвата подобных вещей - переопределить dispatchTouchEvent(MotionEvent ev) в одном действии так:

@Override
public boolean dispatchTouchEvent (MotionEvent ev) {
  // Do your calcluations
  return super.dispatchTouchEvent(ev);
}

Документация для этого здесь. Обратите внимание, что вы также можете переопределить этот метод в любом ViewGroup (например, FrameLayout и т.д.)