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

你可能感兴趣的:(android的事件分发机制)