Вопрос по android-layout, ontouchevent, click, android, touch – Поймать событие onTouch по родителю, обработать его и передать детям

19

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

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

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

Ваш Ответ

1   ответ
25

Насколько я понимаю, это на самом деле идет в другом направлении. Дочерние представления запускают свое событие первым (вроде). Корневое представление получает егоdispatchTouchEvent() вызываемый, который распространяет событие до дочерних элементовonTouchEvent()и затем, в зависимости от того, возвращают ли они истину или ложь, родительскиеonTouchEvent() называется.

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

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

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

так что, возможно, вы не будете использоватьonTouchEvent(MotionEvent me)  в родительском
@CrandellWS правильно
@ Elad92, как вы упомянули, можете ли вы помочь мне изменить код 2d прокрутки?gist.github.com/LOG-TAG/0505eedccef9e00821da не понял какsend the MotionEvent to a GestureDetector
Это сработало! Я продлилFrameLayoutпереопределите метод, который вы упомянули, и отправьтеMotionEvent кGestureDetector, Все это немного сбивает с толку. Спасибо! Elad92

Похожие вопросы