UI刷新绘制

invalidate() 、postInvalidate()、requestLayout() 总结

1、invalidate()

Android提供Invalidate方法实现界面的刷新,但是Invalidate不能和直接在线程中调用,因为它是违背了单线程模型:AndroidUI操作并不是线程安全的,并且这些操作必须在UI线程中调用

invalidate()是用来刷新View的,必须是在UI线程中进行工作。比如在修改某个View的显示时候,调用invalidate()才能重新绘制的界面。也就是说调用了这个方法,进行了重绘View树,即draw()过程。并且从头到尾并不会触发onMeasure()方法(控制大小用)

2、requestLayout()

他跟invalidate()相反,他只调用measure()和layout()过程,不会调用draw()。
比如说,ScrollView中LinearLayout,LinearLayout里面有纵向排列的textView和ImageView,那么假如ImageView的长宽发生了改变,现在想手机里面立马显示这个效果的话,就可以调用imageView.requestLayout(),这样的话ScrollView回重新执行onMeasure()方法确定控件的大小,然后在确定自己的宽高,最后执行layout()方法,对所有的子控件进行定位

3、postInvalidate()

postInvalidate与invalidate()的方法区别是:postInvalidate()方法可以在UI线程中执行,也可以在工作线程中执行。但是从重绘速率上讲,Invalidate()的效率要高一些。

坚持原创技术分享,您的支持将鼓励我继续创作!