通常通过父视图的
onInterceptTouchEvent方法来完成此 *** 作。
onInterceptTouchEvent有机会在视图的子项之前看到任何触摸事件。如果
onInterceptTouchEvent返回
true,则以前处理触摸事件的子视图会收到一个
ACTION_CANCEL,然后从该点开始的事件将发送到父级的
onTouchEvent方法中进行常规处理。当
false事件沿视图层次结构到达其通常的目标时,它也可以返回并监视事件。
您基本上想
onInterceptTouchEvent在检测到猛击的父视图中执行此 *** 作:
- 在上
ACTION_DOWN
,记录触摸的位置。返回false
。 - 在上
ACTION_MOVE
,检查初始触地位置和当前位置之间的差异。如果超过某个阈值,则(框架将使用ViewConfiguration#getScaledTouchSlop()
或其他适当的值ViewConfiguration
用于此类事情)returntrue
。 - 根据常规检测和处理逃跑
onTouchEvent
。
拦截后,
ListView将会取消其触摸处理,并且您的列表项上也不会收到不需要的点击事件。
ListView还设置为,一旦用户开始垂直滚动列表,就禁止其父项拦截事件,这意味着如果用户草率地垂直拖动列表,您就不会出现错误的水平翻转。
这就是股票Android Launcher或News and Weather这样的事情如何进行滚动/可敲击内容的并排翻页。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)