要想充分理解android的分发机制,需要对以下几个知识点有所了解:
1.View和ViewGroup
2.事件
3.View事件的分发机制
4.ViewGroup事件的分发机制
一、View和ViewGroup
Android的UI界面都是由View和ViewGroup及其派生类组合而成,其中,View是所有UI组建的基类,而ViewGroup是容纳这些组件的容器,其本身也是从View派生来的,也就是说ViewGroup的父类就是View。
通常来说,Button、ImageView、TextView等控件都是继承父类View来实现的,RelativeLayout、LinearLayout、FrameLayout等布局都是集成父类ViewGroup来实现的。
二、事件
当手指触摸到View或ViewGroup派生的控件后,将会触发一系列的出发响应时间,如:
onTouchEvent、onClick、onLongClick等。每个view都有自己处理事件的毁掉方法,开发人员只需重写这些回调方法就可以实现需要的响应事件。
而事件通常重要的有如下三种:
MotionEvent.ACTION_DOWN 按下View,是所有事件的开始
MotionEvent.ACTION_MOVE 滑动事件
MotionEvent.ACTION_UP 与down对应,表示抬起
事件的响应原理:
在android开发设计模式中,最广泛应用就是监听、回调,进而形成了事件响应的过程。
以Button的onClick为例,
1、 OnClickListener类是一个当控件被点击后进行回调的一个接口,它完成被点击后的回调通知。
2、 创建一个按钮Button,并设置监听事件,对这个Button进行setOnClickListener操作
3、 当手指触摸到Button按钮,通过一系列方法(之后将会详细讲解,这里暂时忽略),触发并执行到onTouchEvent方法并执行mPerformClick方法,在mPerformClick方法中,首先会判断注 册的mOnClickListener是否为空,若不为空,它就会回调之前注册的onClick方法,进而执行用户自定义代码。
四、View事件的分发机制
disPatchTouchEvent和onTouchEvent两个函数,这两个函数都是View的函数,要理解View事件的分发机制,只要清楚这两个函数就基本清楚了。
这里的“分发”是指一个触摸或点击事件的发生,分发给当前触摸控件所监听的事件(如Onclick、onTouch等),进而来决定是控件的那个函数来响应此次事件。
dispatchTouchEvent:次函数负责尸检的分发,只需记住当触摸一个View控件,首先会调用这个函数就行,在这个函数里决定将事件分发给谁处理。
onTouchEvent:次函数负责执行事件的处理,主要处理MontionEvent.ACTION_DOWN、MotionEvent.ACTION_MOVE和MotionEvent.ACTION_UP 这三个事件。
public boolean onTouchEvent(MotionEvent event)
参数event为手机屏幕触摸事件封装类的对象,其中封装了该事件的所有信息,例如触摸的位置、触摸的类型及触摸的事件等。该对象会在用户触摸手机屏幕时被创建。