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