This is a repost of an answer I wrote on Stack Overflow.
When a user touches the screen, who gets notified of the touch? In what order are views notified?
Let’s take a look at a visual example.
When a touch event occurs, first everyone is notified of the event, starting at the Activity and going all the way to the view on top. Then everyone is given a chance to handle the event, starting with the view on top and going all the way back to the Activity. So the Activity is the first to hear of it and the last to be given a chance to handle it.
If some ViewGroup wants to handle the touch event right away (and not give anyone else down the line a chance at it) then it can just return true
in its onInterceptTouchEvent()
. An Activity doesn't have onInterceptTouchEvent()
but you can override dispatchTouchEvent()
to do the same thing.
If a View (or a ViewGroup) has an OnTouchListener
, then the touch event is handled by OnTouchListener.onTouch()
. Otherwise it is handled by onTouchEvent()
. If onTouchEvent()
returns true
for any touch event, then the handling stops there. No one else down the line gets a chance at it.