requestLayout()与onLayout();onDraw()与drawChild()的区别和联系

requestLayout()定义调用requestLayout()方法的时机是:当前View发生了一些改变,这个改变使得现有的View失效,所以调用requestLayout()方法对View树进行重新布局,过程包括了measure()和layout()过程,但不会调用draw()过程,即不会发生重新绘制视图过程。只是重新测量和布局

onLayout()定义:调用onLayout()的时机是:View需要给自己设置大小和位置了或者ViewGroup需要给子View和ViewGroup自身时调用。

 

requestLayout()onLayout()方法之间的联系:其实两个方法之间的联系很少,调用时机不同,调用者不同,调用时处理的方式和结果都不同。

 

onDraw()定义:

onDraw()方法就是在绘制View第三步时发生,已经测量好View的大小,设置好View的布局,剩下最后一步就是,具体画出这个布局。画的方法就是onDraw(),每个View都需要利用这个方法画出自己,ViewGroup除了要设置背景,不然一般都不会调用该方法

drawChild()定义:

去重新回调每个子视图的draw()方法。

 

onDraw()方法和drawChild()方法之间的联系:

①绘制VIew本身的内容,通过调用View.onDraw(canvas)函数实现;

②ViewGroup绘制自己的孩子通过dispatchDraw(canvas)实现,这个方法中调用drawChild()而这个方法会调用每个View中onDraw()来绘制

猜你喜欢

转载自blog.csdn.net/github_37130188/article/details/89164700