onLayout只能调整子视图的位置,而onDraw和dispatchDraw允许绘制新图形。onDraw的调用在绘制子视图之前,而dispatchDraw的调用在绘制子视图之后。onLayout若想立即显示位置调整后的视图,则要调用requestLayout方法;onDraw和dispatchDraw若想立即显示图形绘制后的视图,则要调用invalidate方法。