美文网首页Android自定义View
完全解析Android事件传递和处理机制

完全解析Android事件传递和处理机制

作者: 小七在简书 | 来源:发表于2020-10-15 10:25 被阅读0次

基础Demo程序结构示意图

image.png

最基本的布局

  • MainActivity是最外层布局

  • OutView继承ViewGroup

  • InnerView继承View

系统默认的事件流向(点击InnerView)

image.png

针对这三个方法,职责和造成的影响如下

image.jpeg

下面分几种情况介绍一下

1. 当覆写MainActivity中的dispatchTouchEvent方法的时候

  • true和false,都会导致事件直接结束传递,因为没有父节点了,所以事件无法向上传递
image.png

2. 当覆写OuterView中的dispatchTouchEvent方法的时候

  • 当返回值为 true 的时候,直接结束在此方法中结束事件传递
image.png
  • 当返回值为 false 的时候,事件会回传到父节点(MainActivity)的onTouchEvent方法中
image.png

3. 当覆写OuterView中的onInterceptTouchEvent方法的时候

  • 当返回值为 true 的时候,阻止事件向下传递,转到自己的onTouchEvent中
image.png
  • 当返回值为 false 的时候,对本次事件传递不会有影响
image.png

4. 关于覆写各个节点中的onTouchEvent方法的时候

  • 这个方法有个特点就是,如果默认不做任何处理,各个节点的onTouchEvent方法执行的顺序一定是从里到外的(这里默认点击的是最里层View);当有节点对事件进行处理后,后续事件也会发送过来处理
4.1. MainActivity中返回true、false或者super都没什么区别,最后还是会回到MainActivity中

Down事件

image.png

MOVE、UP等后续事件

image.png
4.2. OuterView中返回true

Down事件

image.png

MOVE、UP等后续事件

image.png
4.3. OuterView中返回false

Down事件

image.png

MOVE、UP等后续事件

image.png
4.4. InnerView中返回true

Down事件

image.png

MOVE、UP等后续事件

image.png
4.5. InnerView中返回false

Down事件

image.png

MOVE、UP等后续事件

image.png

这样,所有的方法的影响基本就列举完整了,但是大多数情况下都是需要组合起来使用。基本就是系统事件传递主线中可以随时进行介入,根据每个方法的特性,去合理安排介入时机来完成事件的合理分发处理。

相关文章

网友评论

    本文标题:完全解析Android事件传递和处理机制

    本文链接:https://www.haomeiwen.com/subject/pdenpktx.html