requestLayout()和invalidate()的区别

初探:只要调用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的
 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值