View绘制及事件分发机制

View绘制及事件分发机制

view绘制机制

measure()–>onMeasure();

layout()–>onLayout();

draw():

1、绘制自己background.draw(canvas);

2、绘制自己(onDraw);

3、绘制children(dispatchDraw);

4、绘制服饰(onDrawScrollBars)

view分发机制:

主要由3个函数组成:
dispatchTouchEvent():进行事件分发;

onInterceptTouchEvent():用于事件拦截;

onTouchEvent():处理具体的事件,类似于OnTouchListener、OnClickListener

具体的逻辑如下:

public boolean dispatchTouchEvent(MotionEvent ev){
     //默认为false
     boolean consume = false;
     //这是ViewGroup的流程,如果为View则省略了onInterceptTouchEvent()方法
     if(onInterceptTouchEvent(ev)){
        consume = onTouchEvent(ev);
      } else {
        consume = child.dispatchTouchEvent(ev);
      }    

     return consume; 

  }

滑动冲突

1、外部拦截:

顾名思义是在父容器中,更改onInterceptTouchEvent()方法,

2、内部拦截:

父容器不拦截任何事件,所有的事件都传递给子元素,如果子元素需要此事件就直接消耗掉,否则交由父容器进行处理,意思是需要更改子元素的dispatchTouchEvent()以及父元素的onInterceptTouchEvent()。

你可能感兴趣的:(Android框架解析)