View事件传递
2019-03-10 本文已影响0人
初心一点
Android触摸事件类型
- ACTION_DOWN
- ACTION_MOVE
- ACTION_UP
- ACTION_CANCEL
谈到触摸事件,核心需要探索的是关于Activity,ViewGroup和View类中以下几个处理方法的流程
Activity
- dispatchTouchEvent()
- onTouchEvent()
ViewGoup
- dispatchTouchEvent()
- onInterceptTouchEvent()
- onTouchEvent()
View
- dispatchTouchEvent()
- onTouchEvent()
接下来我们带着一些常见问题摸索一下传递流程
- Button1被Layout1包裹,如果Layout1的onInterceptTouchEvent返回true,Button1的onClick,onTouchListener事件还会响应么?为什么?
不会响应。Layout1的onInterceptTouchEvent返回true时,事件传递到此为止,里面嵌套的所有View都不响应,此时如果Layout1设置了onTouchListener监听,并且onTouch回调返回false的情况下,会回调自身的onTouchEvent方法
- Button01同时设置onClick,onTouchListener事件,如果onTouchListener回调方法onTouch返回true,Button01的onClick方法会调用么?
不会调用。因为Button01的onClick事件是在自身onTouchEvent调用的前提下,才可能响应。但是如果onTouchListener的回调onTouch返回true的情况下,onTouchEvent方法是不会调用的。
- 屏幕上点击上述第1点问题中的Button1,点击事件是如何一步步传递的,先Button1处理还是Layout1先处理?
事件最开始是调用Activity的dispatchTouchEvent开始到Layout1的dispatchTouchEvent,然后才是Button1的dispatchTouchEvent方法
- ViewGroup的dispatchTouchEvent返回false时,如何调起父ViewGroup的onTouchEvent方法的?
未完
参考链接:
- https://juejin.im/post/5a0fab1bf265da432d27ad70 一步步探索学习Android Touch事件分发传递机制(一)
- https://juejin.im/post/5a10f8e8f265da431047f930 一步步探索学习Android Touch事件分发传递机制(二)
- https://juejin.im/post/5a2528c3518825320325c8a4 一步步探索学习Android Touch事件分发传递机制(三)
- https://mp.weixin.qq.com/s?__biz=MzIwMzYwMTk1NA==&mid=2247484662&idx=1&sn=7b8a8831b37975936a9ea95c7a54d52a&chksm=96cda5bba1ba2cad32081316ad0771aab42fa64782f7b2c726acc2bb5809fb04f4ef7088ab29&mpshare=1&scene=23&srcid=0527RJ2k4z4mAQyPQqhbtYIG#rd
- https://www.cnblogs.com/lucktian/p/6196786.html
- https://iwatching.github.io/blog/%E5%9F%BA%E7%A1%80/2018/04/15/tech7.html