Overview
Touch event start from top to bottom (each view can decide whether to intercept event), then back up from bottom to top until some view consumed it!Overview Flow
Activity.dispatchTouchEvent -> Root View. dispatchTouchEvent-> .... -> bottom view.dispatchTouchEvent
(back up) -> ... -> Root View.onTouchEvent -> Activity.onTouchEvent
Detail flow inside UI view
ViewGroup.dispatchTouchEvent()- onInterceptTouchEvent()
- Check if it should supersede children
- Return true once consumes all subsequent events
- For each child view, in reverse order they were added
- If touch is relevant (inside view), child.dispatchTouchEvent()
- If not handled by previous, dispatch to next view
- If no children handle event, listener gets a chance
- OnTouchListener.onTouch()
- If no listener, or not handled by child
- OnTouchEvent
Intercept touch event
- Override ViewGropu.onInterceptHoverEvent and return true
- After return true, all subsequent events for the current gesture will come to your onTouchEvent() directly
- onInterceptHoverEvent will not be called for input event of current gesture
- Current target view will receive ACTION_CANCEL
- Intercept cannot be reversed until the next gesture
Misc
- use TouchDelegate if you want to touch area different from view bounding
沒有留言:
張貼留言