Android事件分发机制
事件分发机制
在我们要详细了解这个东西的时候,首先要对它有一个最基础的认知,事件分发是干嘛的?分发的对象又是什么?接下来以一段伪代码来给大家解释什么是事件分发和它分发的对象。
事件分发是干嘛的?
public boolean dispatchTouchEvent(MotionEvent event) {
boolean consume = false;
if (onInterceptTouchEvent(event)) {
consume = onTouchEvent(event);
} else {
consume = child.dispatchTouchEvent(event);
}
return consume;
}
从这段代码中我们可以开出来在dispatchTouchEvent先调用ViewGroup自身的onInterceptTouchEvent方法来判断自己是否拦截,如果拦截了就调用自己的onTouchEvent方法,如果方法返回true这次事件就算被消耗,事件分发到此为止,如果返回false就会往上一层返回处理,如果当前的ViewGroup的onInterceptTouchEvent返回false就会调用它的子view的dispatchTouchEvent方法,这样事件就又传递下去了,如果子view处理不了,那么还会回来调用ViewGroup的onTouchEvent方法(这一点没有在代码里体现出来,接下来举一个通俗的例子来帮助大家理解)
领导接到了一个任务,但是领导并不想自己去动手做,于是就交给了手下小A,小A的属性就是有任务就接(能不能干另说),如果任务简单,小A独立完成了那么事件分发就完成了,如果小A任务没有完成就会返回给领导,领导手底下还没有人解决问题,那就只有领导干了,然后领导开始接手、解决了问题,事件分发结束。
事件分发的对象是什么?
事件分发的对象是:点击事件(Touch事件) 。ps:当用户触摸屏幕(view或是viewgroup中的控件)时就会产生点击事件。
事件类型有:按下(MotionEvent.ACTION_DOWN)、抬起(MotionEvent.ACTION_UP)、滑动(MotionEvent.ACTION_MOVE)、结束(MotionEvent.ACTION_CANCEL)。
ps:一般情况下事件分发都是以按下开始,抬起结束,中间又有无数的移动事件。
画图说明:
事件分发的本质是什么?
事件分发就是将一个事件传递到一个具体的view进行处理的一个过程(上边有举例说明)。
事件分发在哪些对象间进行传递?
事件分发在 Activity ViewGroup View 这三个对象间传递,三者关系如下图:
还没有评论,来说两句吧...