View,ViewGroup的事件分发机制

参考来源:

http://blog.csdn.net/guolin_blog/article/details/9097463

http://blog.csdn.net/guolin_blog/article/details/9153747

 

 

       看了两篇文章,讲的是view和viewgroup的事件分发机制,看了之后顿觉知识库又丰富了,写篇文章梳理一下我的理解,也算是为了记录一下,方面以后翻阅。

       长篇大论的源码的解读,结果的论证我这里也不进行了,资料中的前辈讲解的很清楚,如果需要了解的话可以进去详细阅读,我这里就以知识点的形式罗列一下,如有错误的话欢迎指出:

        1、view中的dispatchTouchEvent为进行事件分发的主入口

        2、view先是响应onTouch,再响应onTouchEvent的事件,如onClick等。

        3、如果view的onTouch事件返回false,则继续响应onTouchEvent;如果返回true,就不再响应onTouchEvent。这就是为什么有时候添加多事件的时候,onClick等事件没反应,想我这样的新手遇到这样的问题可以看一下onTouch事件的返回结果。

        4、如果onTouch返回的是false,那么可以点击的View(如button)可以继续action的传递,如ACTION_DOWN、ACTION_UP等,不可以点击的view(如imageview,可给其加上clickable="true"的属性变为可点击)会终止action的传递。

        5、onTouch能够得到执行需要两个前提条件,第一mOnTouchListener的值不能为空,第二当前点击的控件必须是enable的。因此如果你有一个控件是非enable的,那么给它注册onTouch事件将永远得不到执行。

        6、Android事件分发是先传递到ViewGroup,再由ViewGroup遍历子View,再去响应当前触摸的子View的事件,响应之后终止事件的传递,所以看起来像是先传递到子View,再传递到ViewGroup的,实则不然。

        7、 在ViewGroup中可以通过onInterceptTouchEvent方法对事件传递进行拦截,onInterceptTouchEvent方法返回true代表不允许事件继续向子View传递,返回false代表不对事件进行拦截,默认返回false。

猜你喜欢

转载自men4661273.iteye.com/blog/2153931
今日推荐