requestLayout和invalidate

requestLayout和invalidate_第1张图片
requestLayout&invalidate.jpg

如果View确定自身不再适合当前区域,比如说它的LayoutParams发生了改变,需要父布局对其进行重新测量、布局、绘制这三个流程,使用requestLayout。而invalidate则是刷新当前View,使当前View进行重绘,不会进行测量、布局流程

postInvalidate法与invalidate方法的作用是一样的,都是使View树重绘,postInvalidate是在非UI线程中调用,invalidate则是在UI线程中调用

invalidate方法感觉起来好像很重,其实setVisibility(), setText()等方法都是会调用invalidate来重绘draw

ListView,Recyclerview的使用中,因为它们会缓存Item的布局,如果布局设置了weight=1类似的属性,那么效果看起来就不符合预期,这时需要weight=1的控件调用requestLayout()来重新测量一下宽度

参考:
Android View 深度分析requestLayout、invalidate与postInvalidate

你可能感兴趣的:(requestLayout和invalidate)