
至于为什么没有分析,是因为上面两个效果,会涉及到ViewGroup的事件分发,想要知道上面两种会出现什么效果,以及出现这种效果的原因请移步 ViewGroup的事件分发机制 ,同时View的事件分发机制就到这里了。
上一篇文章和大家聊到了IMS在SystemServer进程native层中的原理,本文来聊聊App进程是怎么监听IMS分发出来的输入信号的
还记得我写过WMS系列文章 WMS在Activity启动中的职责 添加窗体(三) 中,提到了App第一次渲染的时候会通过ViewRootImpl的addWindow方法,在WMS中为当前的Activity中的PhoneWindow添加一个对应的WindowState进行管理。
让我们先看看ViewRootImpl中做了什么。
如果遇到什么问题,欢迎来到本文 >
比如接着上篇 Android-View的事件分发及拦截机制简单流程先体验再研究(场景?疑问 具体?待续) ,小白现在要实现就是子View和父ViewGroup都响应点击事件。
1 单纯的都只是响应down事件
这个就很简单了 - 直接子View的public boolean onTouchEvent(MotionEvent event) 里面直接返回false就行了。也就是子控件响应了一次down后,接下来就交给父ViewGroup了(子View就啥几把也干不了了);
2 响应down和up事件,move啥的
我们知道子View如果onTouch里面返回了true,那么将会处理后续的move,up事件。而不再交给上层父ViewGroup。那父ViewGroup就没办法在Touch里面处理,所以我们只能放到dispatchTouchEvent或者onInterceptTouchEvent中处理这个down,up等事件:
比如dispatchTouchEvent中:
这样的情况就是父ViewGroup先执行点击事件,然后子View再执行。 如果您需要父ViewGroup晚点,可以延时执行啥的。
如果此时,子View的dispatchTouchEvent返回true - 表示拦截,不继续了
那么子View的所有的事件都不会响应了。其实也就是我们的一个事件先传递,touch再处理的树形图:
百度上拔个图来
简单记录下下而已,继续加深理解这是上一篇的续,还是上一篇啧啧后面是官方文档分析来着
以上就是关于Android View 事件分发机制全部的内容,包括:Android View 事件分发机制、Android重学系列 IMS与事件分发(下)、Android-View的事件分发及拦截-父控件和子控件都处理触摸事件的方式等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)