Android绘制中requestLayout,invalidate和postInvalidate的异同

Android绘制中requestLayout,invalidate和postInvalidate的异同

(图片来源忘记了)

简单的区别为:

1、invalidate和postInvalidate都会使view重绘(即调用onDraw方法),不同的是,invalidate是在UI线程自身中使用,而postInvalidate在非UI线程中使用。

2、当view确定自身已经不再适合现有的区域时,该view本身调用onLayout来要求父类的视图重新调用三大流程来重新设置自己位置。例如动态移动一个View的位置,或者View的大小、形状发生了变化。