dispatchDraw,dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent,onMesure,onLayout

来源:互联网 发布:java 日志组件 编辑:程序博客网 时间:2024/05/12 08:36

很多朋友使用见到如标题所示的关键字时就一头雾水,不知道是它们是做什么的。接下来我将逐一介绍他们的用处,以及适用场景。

介绍以下前提的场景是,我们在继承ViewGroup里使用这些方法,也就是以下方法大部分只有在重写容器组件时才会用到,一般继承容器类实现滑动效果,或者具有扩展功能的组件。我们以下的示例如ViewGroup1包含ViewGroup2,ViewGroup2包含两个View,分别为View01,View02来讲解,依次关系为ViewGroup01->ViewGroup02->View01和View02。

 

简述

  当TouchEvent发生时,首先Activity将TouchEvent传递给最顶层的View, TouchEvent最先到达最顶层 view 的 dispatchTouchEvent ,然后由  dispatchTouchEvent 方法进行分发,如果dispatchTouchEvent返回true ,则交给这个view的onTouchEvent处理,如果dispatchTouchEvent返回 false ,则交给这个 view 的 interceptTouchEvent 方法来决定是否要拦截这个事件,如果 interceptTouchEvent 返回 true ,也就是拦截掉了,则交给它的 onTouchEvent 来处理,如果 interceptTouchEvent 返回 false ,那么就传递给子 view ,由子 view 的 dispatchTouchEvent 再来开始这个事件的分发。如果事件传递到某一层的子 view 的 onTouchEvent 上了,这个方法返回了 false ,那么这个事件会从这个 view 往上传递,都是 onTouchEvent 来接收。而如果传递到最上面的 onTouchEvent 也返回 false 的话,这个事件就会“消失”,而且接收不到下一次事件。

1.onMesure:当ViewGroup02显示View01和View02显示前,需要对View01和View02进行测绘,来确定他们的大小,此测绘过程是在onMesure里面处理,此onMesure是在父    类 mesure里调用的,mesure是final的,不允许重载,但在mesure里面调用了onMesure抽象方法。

2.onLayout:当onMesure测绘大小后,就将要把测绘的VIew01和View02放置到相应的位置,View01放在左边,View02放在右边。在这个方法要对子控件进行遍历布局。

3.dispatchDraw:此方法在draw里面调用,就是把绘画工作分发给子控件。如ViewGroup02有两个View分别为View01和View02,则在ViewGroup02里面重写dispatchDraw分发给View01和View02进行绘制子控件。

4.dispatchTouchEvent:此方法对事件的分发,这个方法在所有事件获取之前调用此方法。

5.onInterceptTouchEvent:用于对事件的拦截,如果return false,则将事件传递给子控件的onTouchEvent,如果返回true,则直接调用本身的onTouch。

6.onTouchEvent:如果return false,则调用子控件的触摸事件,如果return true,则不向下传递。

 

以上内容简单的说了下基本功能,详细介绍,请等待,上班时间来不急写喽

原创粉丝点击