invalidate()和postInvalidate() requeLayout() layout()的区别

invalidate() 是用来刷新View的,必须是在UI线程中进行工作。比如在修改某个view的显示时,调用
invalidate()才能看到重新绘制的界面。

postInvalidate() 在工作者线程(非UI线程)中被调用。

和相关重绘的其他方法的区别
在自定义控件的过程会遇到以上方法,三个方法的区别如下:

  1. requeLayout() : 控件会重新执行 onMesure() onLayout() ,比如 ScrollView中有LinearLaout ,LinearLayout里面有纵向排列的ImageView和TextView,那么假如ImageView的长宽发生了变化,而要立即在手机上显示这个变化的话,就可调用 imageView.requestLayout();这样的话ScrollView 会重新执行onMesure()这个方法会确定控件的大小然后在确定出自己的宽高,最后在执行onLayout(),这个方法是对所有的子控件进行定位的。

2.invalidate() :是自定义View 的时候,重新执行onDraw()方法。

3 layout():对控件进行重新定位执行onLayout()这个方法,比如要做一个可回弹的ScrollView,思路就是随着手势的滑动子控件滑动,那么我们可以将ScrollView的子控件调用layout(l,t,r,b)这个方法就行了。

你可能感兴趣的:(invalidate()和postInvalidate() requeLayout() layout()的区别)