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()。