您的位置:首页 > 移动开发 > Android开发

Android中的dispatchTouchEvent()、onInterceptTouchEvent()和onTouchEvent()

2016-05-23 11:33 701 查看
   图例地址:http://blog.csdn.net/xyz_lmn/article/details/12517911

android系统中的每个ViewGroup的子类都具有下面三个和TouchEvent处理密切相关的方法: 

1)public boolean dispatchTouchEvent(MotionEvent ev)  这个方法用来分发TouchEvent

2)public boolean onInterceptTouchEvent(MotionEvent ev) 这个方法用来拦截TouchEvent 

3)public boolean onTouchEvent(MotionEvent ev) 这个方法用来处理TouchEvent

其中View的子类是没有onInterceptTouchEvent这个方法的。

假设我们这里的控件都是继承ViewGroup的,当TouchEvent发生时,

首先Activity将TouchEvent传递给最顶层的View, TouchEvent最先到达最顶层 view 的 dispatchTouchEvent ,

然后由 dispatchTouchEvent 方法进行分发。 如果dispatchTouchEvent返回true ,则交给这个view的onTouchEvent处理,如果dispatchTouchEvent返回 false ,则交给这个 view 的 interceptTouchEvent 方法来决定是否要拦截这个事件。

如果 interceptTouchEvent 返回 true ,也就是拦截掉了,则交给它的 onTouchEvent 来处理,如果 interceptTouchEvent 返回 false ,那么就传递给子 view ,由子 view 的 dispatchTouchEvent 再来开始这个事件的分发。

如果事件传递到某一层的子 view 的 onTouchEvent 上了,这个方法返回了 false ,那么这个事件会从这个 view 往上传递,都是 onTouchEvent 来接收。而如果传递到最上面的 onTouchEvent 也返回 false 的话,这个事件就会“消失”,而且接收不到下一次事件。 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: