View事件传递

Android触摸事件类型

  1. ACTION_DOWN
  2. ACTION_MOVE
  3. ACTION_UP
  4. ACTION_CANCEL

谈到触摸事件,核心需要探索的是关于Activity,ViewGroup和View类中以下几个处理方法的流程

Activity

  • dispatchTouchEvent()
  • onTouchEvent()

ViewGoup

  • dispatchTouchEvent()
  • onInterceptTouchEvent()
  • onTouchEvent()

View

  • dispatchTouchEvent()
  • onTouchEvent()

接下来我们带着一些常见问题摸索一下传递流程

  1. Button1被Layout1包裹,如果Layout1的onInterceptTouchEvent返回true,Button1的onClick,onTouchListener事件还会响应么?为什么?

不会响应。Layout1的onInterceptTouchEvent返回true时,事件传递到此为止,里面嵌套的所有View都不响应,此时如果Layout1设置了onTouchListener监听,并且onTouch回调返回false的情况下,会回调自身的onTouchEvent方法

  1. Button01同时设置onClick,onTouchListener事件,如果onTouchListener回调方法onTouch返回true,Button01的onClick方法会调用么?

不会调用。因为Button01的onClick事件是在自身onTouchEvent调用的前提下,才可能响应。但是如果onTouchListener的回调onTouch返回true的情况下,onTouchEvent方法是不会调用的。

  1. 屏幕上点击上述第1点问题中的Button1,点击事件是如何一步步传递的,先Button1处理还是Layout1先处理?

事件最开始是调用Activity的dispatchTouchEvent开始到Layout1的dispatchTouchEvent,然后才是Button1的dispatchTouchEvent方法

  1. ViewGroup的dispatchTouchEvent返回false时,如何调起父ViewGroup的onTouchEvent方法的?

未完

参考链接:

  1. https://juejin.im/post/5a0fab1bf265da432d27ad70 一步步探索学习Android Touch事件分发传递机制(一)
  2. https://juejin.im/post/5a10f8e8f265da431047f930 一步步探索学习Android Touch事件分发传递机制(二)
  3. https://juejin.im/post/5a2528c3518825320325c8a4 一步步探索学习Android Touch事件分发传递机制(三)
  4. https://mp.weixin.qq.com/s?__biz=MzIwMzYwMTk1NA==&mid=2247484662&idx=1&sn=7b8a8831b37975936a9ea95c7a54d52a&chksm=96cda5bba1ba2cad32081316ad0771aab42fa64782f7b2c726acc2bb5809fb04f4ef7088ab29&mpshare=1&scene=23&srcid=0527RJ2k4z4mAQyPQqhbtYIG#rd
  5. https://www.cnblogs.com/lucktian/p/6196786.html
  6. https://iwatching.github.io/blog/%E5%9F%BA%E7%A1%80/2018/04/15/tech7.html

你可能感兴趣的:(View事件传递)