初探:只要调用addView、setVisbility、setText方法,就会重新调用 requestLayout,重新执行 view的绘制流程,requestLayout在onMeasure之后调用;
这种重新绘制和第一次view绘制不一样,比如一次性添加10个TextView,它会等你全部添加完后才会执行一遍onMeasure,不可能是添加1个TextView就调用一次onMeasure
好像用来刷新界面的,因为onMeasure绘制完成之后调用requestLayout,也只有刷新了。
requestLayout():view调用这个方法要求parent view重新进行一次测量、布局、绘制这三个流程来更新自己位置。
invalidate():view调用这个方法迫使view进行重新绘制。
一句话,requestLayout()的效果是重新布局自己在父布局中的位置,invalidate()的效果是强制调用自己的onDraw()方法。
整个Android的UI绘制机制是从哪里开始的即入口在哪里呢?答案就是ViewRootImpl类的performTraversals()方法。在这个方法内部,分别调用measure、layout、draw方法来进行View的三大工作流程。
至此,我们就能明白了,requestLayout()会牵动出整个Android绘制机制重新走一遍流程
Invalidate这个方法只能在UI线程中去调用
postInvalidate是可以在非UI线程中去调用刷新UI的
requestLayout()和invalidate()的区别
最新推荐文章于 2024-06-01 00:06:10 发布