android View 事件处理流程

来源:互联网 发布:网络测速工具 编辑:程序博客网 时间:2024/04/29 14:45

android中的事件类型分为按键事件和屏幕触摸事件,Touch事件是屏幕触摸事件的基础事件,有必要对它进行深入的了解。

一个最简单的屏幕触摸动作触发了一系列Touch事件:ACTION_DOWN->ACTION_MOVE->ACTION_MOVE->ACTION_MOVE...->ACTION_MOVE->ACTION_UP
当屏幕中包含一个ViewGroup,而这个ViewGroup又包含一个子view,这个时候android系统如何处理Touch事件呢?到底是ViewGroup来处理Touch事件,还是子view来处理Touch事件呢?我只能很肯定的对你说不一定。呵呵,为什么呢?看看下面我的调查结果你就明白了。
每个View中都有的三个函数调用顺序:
 此View 先调用dispatchTouchEvent  ------>  再调用此View的
 onInterceptTouchEvent  返回值为真---------》直接调用此View的onTouchEvent 
                     返回值为假-----》调用下一个View的dispatchTouchEvent

android系统中的每个View的子类都具有下面三个和TouchEvent处理密切相关的方法:
1)public boolean dispatchTouchEvent(MotionEvent ev)  这个方法用来分发TouchEvent  
                                  事件分发是由:rootView  →   子View
2)public boolean onInterceptTouchEvent(MotionEvent ev)    这个方法用来拦截TouchEvent 
   在分发过程中,如果哪一个的View 的 onInterceptTouchEvent 返回值为真的话
                                 则停止像其子View 分发事件,子View 将得不到事件
                                  默认的返回值为false
3)public boolean onTouchEvent(MotionEvent ev) 这个方法用来处理TouchEvent
                                 onTouchEvent 如果返回值为真: 则将会执行onTouchEvent 中的内容,它的父View 将不会处理此事件
                                                        如果返回值为假:则不会执行onTouchEvent 中的内容, 交给它父View, 由父View 的OnTouchEvent返回值决定
                                 默认返回值为假。
原创粉丝点击