measure()–>onMeasure();
layout()–>onLayout();
draw():
1、绘制自己background.draw(canvas);
2、绘制自己(onDraw);
3、绘制children(dispatchDraw);
4、绘制服饰(onDrawScrollBars)
主要由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()。