简述Requestlayout,onlayout,onDraw,DrawChild区别与联系 ?
参考回答:
requestLayout()
、onLayout()
、onDraw()
和 drawChild()
是Android视图的生命周期方法,它们的功能和调用时机有所不同:
– requestLayout()
:请求视图重新布局,通常用于视图的尺寸或位置发生变化时。
– onLayout()
:在布局过程中,父视图用来测量并定位其子视图的位置和尺寸。
– onDraw()
:视图的绘制方法,用于绘制视图的内容,如背景、文本、图形等。
– drawChild()
:在父视图的onDraw()
中调用,用于绘制子视图的内容。
详细讲解与拓展:
1. requestLayout()
- 功能:
requestLayout()
用于请求视图重新布局,它会触发父视图的onLayout()
方法。在视图的尺寸或位置发生变化时,调用此方法来通知系统重新测量和布局该视图。 - 调用时机:当视图的大小、位置或其他布局相关的属性发生变化时,调用
requestLayout()
请求重新布局。它会在下一轮布局周期中触发onLayout()
方法。示例:
2. onLayout()
- 功能:
onLayout()
是ViewGroup
类的核心方法,用于测量并确定子视图的位置和大小。它会在视图的布局阶段被调用,父视图通过该方法布局其子视图。 - 调用时机:
onLayout()
在requestLayout()
方法调用后被触发,用于为每个子视图计算并设置它们的位置。示例:
3. onDraw()
- 功能:
onDraw()
是View
的绘制方法,用于在视图的画布上绘制内容。它主要通过Canvas
对象绘制各种图形,如背景、文本、图片等。 - 调用时机:
onDraw()
会在视图绘制阶段被调用,一般是在视图完成布局后执行。当视图需要更新显示内容时,系统会调用onDraw()
进行绘制。示例:
4. drawChild()
- 功能:
drawChild()
是ViewGroup
类中的方法,用于绘制子视图。它常在ViewGroup
的onDraw()
方法中调用,用来绘制所有子视图。 - 调用时机:
drawChild()
会在父视图的onDraw()
方法中被调用,在绘制父视图的背景或其他内容后,调用drawChild()
绘制子视图。示例:
5. 区别与联系
requestLayout()
:请求重新布局,触发onLayout()
方法来重新计算视图的大小和位置。onLayout()
:在视图的布局过程中调用,计算并设置子视图的尺寸和位置。onDraw()
:视图的绘制方法,负责绘制视图内容,如背景、文本等。drawChild()
:用于绘制子视图的内容,通常在父视图的onDraw()
方法中调用。
这些方法共同协作来完成视图的布局和绘制流程。requestLayout()
触发布局,onLayout()
进行视图的布局,onDraw()
进行视图的绘制,drawChild()
则在父视图的绘制过程中绘制子视图。
总结:
requestLayout()
请求重新布局,触发onLayout()
方法;onLayout()
用于布局过程,设置子视图位置和大小;onDraw()
用于绘制视图内容;drawChild()
在父视图绘制时调用,用于绘制子视图。