外观
横向滑动控件放进纵向列表怎样处理冲突?
标准回答
先用移动距离和方向判断用户意图,再决定由父容器还是子控件处理。父层可在 onInterceptTouchEvent 中按方向拦截;子层也可在合适时机调用 requestDisallowInterceptTouchEvent,协调父层拦截行为。
机制解释
不能只比较某一次 MOVE 的绝对值,还要考虑 touchSlop、多指、边界和 CANCEL。支持嵌套滚动的控件可通过 NestedScrolling 机制分配滚动距离及 fling,通常比强行禁止所有父层拦截更稳。
延伸追问
子控件到边缘后怎么让父容器接手?需要定义边界交接规则,并正确结束或转交当前手势,不能让两个控件同时认为自己独占同一段事件。
内容来源
- Android 智能硬件 SDK 技术 Wiki · 原条目
Q14