Как сохранить события касания, обрабатываемые виджетом, даже если координаты касания больше не находятся внутри виджета, в Android - PullRequest
3 голосов
/ 24 июля 2011

Извините за сложный вопрос, позвольте мне объяснить. Я создал собственный виджет, который обрабатывает некоторые события касания. Что я хочу сделать, так это когда я запускаю сенсорное событие для этого пользовательского виджета (onDown), я хочу, чтобы этот виджет продолжал обрабатывать это событие, даже если абсолютные координаты отсутствуют в этом виджете.

У меня есть вид прокрутки и поверх этого (внутри скроллвью) виджет, который обрабатывает (влево - вправо) прокрутки. Но если я перемещаю палец вертикально, события касания поглощаются и обрабатываются scollview. Если есть способ запретить просмотр прокрутки для обработки сенсорных событий или лучше заставить пользовательский виджет продолжать обрабатывать touchEvent, если я запускаю ontouchEvent внутри пользовательского виджета?

ОБНОВЛЕНИЕ Я столкнулся с этим http://groups.google.com/group/android-framework/browse_thread/thread/2cdd4269dfb2772e?pli=1.

Это работает в моем случае, если пользовательский виджет НЕ находится внутри вида с прокруткой, как "ScrollView". Попытка решить «Пчела внутри прокручиваемого объекта. Как не отправлять их в тачвентах родителю? Возвращение true не решает проблему

Ответы [ 2 ]

8 голосов
/ 04 августа 2011

В обработчике onTouch вашего виджета (например, во время ACTION_MOVE) вызовите parent.requestDisallowInterceptTouchEvent (true) . Этот метод в основном просит родителя (в вашем случае представление прокрутки) и его предка не перехватывать событие касания.

1 голос
/ 04 августа 2011

Вам потребуется реализовать специальный подкласс ScrollView, который позволяет вашему виджету сообщать ему об отключении прокрутки при желании (чтобы он не начинал прокручиваться после достаточного перемещения и получать события из вашего виджета).Пользовательский ScrollView может переопределить этот метод:

http://developer.android.com/reference/android/widget/ScrollView.html#onInterceptTouchEvent(android.view.MotionEvent)

Если вы не хотите, чтобы базовый класс потреблял события касания для прокруток, верните здесь false вместо вызова базовой реализации.

...