Поймать событие onTouch родителем, обработать его и передать детям
Я попытался понять, как Android ручка коснуться события и немного запутался. Из того, что я понимаю, событие touch отправляется в корневой режим и переходит к детям.
У меня есть FrameLayout
, который является контейнером для Fragment
.
Первый фрагмент представляет собой ScrollView
, второй - некий Gallery
(HorizontalListView), а последний - также FrameLayout
. Каждый раз только один фрагмент в макете.
То, что я хочу сделать, - это определить пользовательские подсказки на экране для использования в приложении. Я хочу подсчитать удары и сделать что-то после некоторого количества проверок.
Я попытался поместить OnTouchListener
в начало FrameLayout
, но он не вызывается, когда дочерним является ScrollView
или Gallery
. Я попытался вернуть false
, а также true
в конце onTouch
, но я получаю тот же результат - он никогда не вызывается.
Как я могу это сделать?
Я просто хочу "прозрачно" обрабатывать события касания и передавать их, как я даже не прикасался к ним.
Ответы
Ответ 1
Я понимаю, что он действительно идет в другом направлении. Взгляды на ребенка запускают свое событие сначала (вроде). Корневой вид вызывает его dispatchTouchEvent()
, который передает событие до детей onTouchEvent()
, а затем, в зависимости от того, вернутся ли они true или false, вызывается родительский onTouchEvent()
.
Обычное решение для перехвата подобных вещей - переопределить dispatchTouchEvent(MotionEvent ev)
в одном действии так:
@Override
public boolean dispatchTouchEvent (MotionEvent ev) {
// Do your calcluations
return super.dispatchTouchEvent(ev);
}
Документация для этого здесь. Обратите внимание, что вы также можете переопределить этот метод в любом ViewGroup
(например, FrameLayout
и т.д.)