View的事件分发机制

2019-10-11  本文已影响0人  哇楼主

点击事件用MotionEvent来表示,当一个点击操作发生时,事件最先传递给当前Activity,由Activity的dispatchTouchEvent来进行事件的分发,具体工作是由Activity内部的Window(也就是PhoneWindow)来完成的,window会讲事件传递给decorView,decorView是当前界面的底层容器(即 setContectView所设置的view的父容器),decorView调用ViewGroup的dispatchTouchEvent将事件分发到view(也就是setContectView所设置的view),当事件达到顶级View(一般是viewgroup)后会调用ViewGroup的dispatchTouchEvent,如果顶级ViewGroup拦截事件,即onInterceptTouchEvent方法返回true,则事件由ViewGroup处理,这时如果ViewGroup的mOnTouchListener被设置,则onTouch方法会被调用,否则onTouchEvent被调用,也就是说如果都提供onTouch会屏蔽掉onTouchEvent。如果顶级view不拦截事件,则会传递给他的子View,这时子View的dispatchTouchEvent方法会被调用,如果子View是ViewGroup,则事件传递过程跟顶级View一样,否则如果子View设置OnTouchListener被设置,则onTouch方法会被调用,否则onTouchEvent被调用,若都没有消费此事件最终将会传递给Activity处理。

注意

上一篇 下一篇

猜你喜欢

热点阅读