外观
dispatchTouchEvent onInterceptTouchEvent 和 onTouchEvent 是什么关系?
标准回答
dispatchTouchEvent 是分发入口;ViewGroup 的 onInterceptTouchEvent 决定是否拦截并由父容器处理;onTouchEvent 负责当前 View 的实际消费。一组手势通常由 DOWN 建立触摸目标,后续 MOVE 和 UP 继续交给该目标。父容器可以在中途决定拦截,此时子 View 会收到 CANCEL,父容器开始处理后续事件。解决滑动冲突时,我会根据方向和距离确定拦截条件,必要时由子 View 请求 requestDisallowInterceptTouchEvent,保证整组手势有一致归属。
延伸追问
子 View 不消费 DOWN 时,通常不会成为后续事件的触摸目标;多指拆分等情况需要结合 ViewGroup 的具体配置。
内容来源
- Android Framework 知识手册 · 原条目
5-2