android的事件分发机制

android的事件分发涉及的知识要点:

一、View及ViewGroup:

Android的UI界面都是由View和ViewGroup及其派生类组合而成的。其中,View是所有UI组件的基类,而ViewGroup是容纳这些组件的容器,其本身也是从View派生出来的,也就是说ViewGroup的父类就是View。

      通常来说,Button、ImageView、TextView等控件都是继承父类View来实现的。RelativeLayout、LinearLayout、FrameLayout等布局都是继承父类ViewGroup来实现的。

二、事件:

定义:当用户触摸屏幕的时候(view或者ViewGroup派生的控件),将产生点击事件。

而事件通常重要的有如下三种:

•MotionEvent.ACTION_DOWN   按下View,是所有事件的开始

•MotionEvent.ACTION_MOVE    滑动事件

•MotionEvent.ACTION_UP       与down对应,表示抬起

注:事件都是以DOWN开始,UP结束,中间有无数个MOVE,MOVE数可以为0.

三、事件分发过程涉及的方法:


四、事件在哪些对象之间传递:

Android的UI界面是由Activity、View、ViewGroup及其派生类组成。

传递顺序是:Activity->ViewGroup->View。


整个事件分发过程就像是由dispatchTouchEvent控制的递归,流程下行方向需要考虑onInterceptTouchEvent方法是否拦截请求,上行方向需要考虑onTouchEvent是否消耗事件。


事件分发的一些特殊情况,android体现了一些处理时间的惯性问题,即当一个View消耗了DOWN事件的时候,后续的一系列事件默认都会由它消耗,除非上层的ViewGroup拦截,即使拦截也只能在下个事件生效,本次事件会转化成CANCLE事件发给消耗DOWN事件的VIew。

参考文章:https://www.jianshu.com/p/38015afcdb58

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容