Skip to content
阅读进度

横向滑动控件放进纵向列表怎样处理冲突? ​

返回 View 与显示链路 目录

标准回答 ​

先用移动距离和方向判断用户意图,再决定由父容器还是子控件处理。父层可在 onInterceptTouchEvent 中按方向拦截;子层也可在合适时机调用 requestDisallowInterceptTouchEvent,协调父层拦截行为。

机制解释 ​

不能只比较某一次 MOVE 的绝对值,还要考虑 touchSlop、多指、边界和 CANCEL。支持嵌套滚动的控件可通过 NestedScrolling 机制分配滚动距离及 fling,通常比强行禁止所有父层拦截更稳。

延伸追问 ​

子控件到边缘后怎么让父容器接手?需要定义边界交接规则,并正确结束或转交当前手势,不能让两个控件同时认为自己独占同一段事件。

内容来源 ​

用完整回答理解机制,用真实证据解释项目。