android事件分发机制


网上很多介绍事件分发机制的,都讲的云里雾里。自己动手写了个demo,现在将完整结论总结如下:


首先说明有三个相关方法

1)public boolean dispatchTouchEvent(MotionEvent ev)  这个方法用来分发TouchEvent


2)public boolean onInterceptTouchEvent(MotionEvent ev) 这个方法用来拦截TouchEvent


3)public boolean onTouchEvent(MotionEvent ev) 这个方法用来处理TouchEvent



涉及到activity的方法:

public boolean dispatchTouchEvent(MotionEvent ev) 

public boolean onTouchEvent(MotionEvent ev) 


涉及到viewGroup的方法:

public boolean dispatchTouchEvent(MotionEvent ev) 

public boolean onInterceptTouchEvent(MotionEvent ev) 

public boolean onTouchEvent(MotionEvent ev) 



涉及到view的方法:
public boolean dispatchTouchEvent(MotionEvent ev) 
public boolean onTouchEvent(MotionEvent ev) 



完整传递路径:  根布局到子布局分发,子布局到根布局处理。

即分发是 Activity ---> ViewGroup --->View

    处理是 View ---> ViewGroup --->Activity



activity dispatchTouchEvent
viewGroup dispatchTouchEvent
viewGroup onInterceptTouchEvent
view  dispatchTouchEvent
view onTouchEvent
viewGroup onTouchEvent
activity onTouchEvent




三个方法的传递过程说明:

1)dispatchTouchEvent


                                   如果调用 super.dispatchTouchEvent(ev),并且return false,会继续传递;

                                   如果调用 super.dispatchTouchEvent(ev),并且return true,会继续传递直到当前view的onTouchEvent被调用;

                                   如果直接 return true 终止传递

                                   如果直接 return false 会从当前view的父布局(即当前层级的上一层级)的onTouchEvent开始继续传递;
  (super.dispatchTouchEvent(ev)会去调用继续传递逻辑)


2)onInterceptTouchEvent 

                                    如果return true 会从当前view(当前层级)的onTouchEvent开始继续传递;

                                    如果return false 会继续传递;

(有没有调用super.onInterceptTouchEvent(ev)对路径链没有影响;因为ViewGroup的这个方法只是返回了false)



3)onTouchEvent 

                                    如果return true 会终止传递

                                    如果return false 会继续传递;




需要说明的是,以上结论把Activity当作ViewGroup的上一层级,继续传递的意思是继续按照完整传递路径来传递事件。

另外,onTouchEvent的return true,会引起当前view到根布局的dispatchTouchEvent返回值为true;dispatchTouchEvent的return true,会引起当前view到根布局的dispatchTouchEvent返回值为true。



好了,关于事件分发就说到这里。






Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值