Android 开发中踩过的坑之三:Touch事件相关方法

View嵌套的时候, Touch事件的传递, 常常让人头疼. 
spa

好比在ScrollView里, 在WebView里, 在ListView里. 事件的传递的结果会让你以为"这太灵异了!"事件


麻烦的代码就不说了,若是只作上层App, 那也只有为数很少的几个方法可让咱们处理这些灵异问题:ci

onTouchEvent(), dispatchTouchEvent(), onInterceptTouchEvent().it

而且处理的方案, 也只有控制他们的返回值.List

这三个方法的返回值, 意义各不相同:
方法

onTouchEvent(): di

true: "我处理了这个事件, 而且与我在同一个ViewGroup下的其余View将不能再处理这个事件"vi

false:"我处理了这个事件, 而且与我在同一个ViewGroup下的其余View能够继续处理这个事件"工作


dispatchTouchEvent()控件

true: "我对这个事件(一般是Down事件)感兴趣, 我将在onTouchEvent中处理这个事件"

false: "我对这个事件没兴趣, 我不会处理这个事件以及以后与这个事件相关的move, up事件"


onInterceptTouchEvent

这方法是ViewGroup的方法,

true: "个人子View将不能处理这个事件, 不会调用子View的onTouchEvent"

fasle: "个人子View能够继续处理这个事件, 我会将事件传递给子View"


如此. 基本引发灵异事件的就这仨方法了. 

当发现onTouch不能工做, 检查一下View的dispatchTouchEvent是否返回了false, 或者检查一下父View的onInterceptTouchEvent是否返回了true. 固然Acitivity也是有这几个方法, 同样须要检查.


改的时候也要特别当心, 由于各类本身定义的控件, 都对相应的Touch事件有特殊处理, 因此要当心验证重写相关方法后是否会影响相关逻辑.

相关文章
相关标签/搜索