天天记录 - Android invalidate流程分析-图文

本文通过一个实例详细解析了Android中invalidate方法的触发及传递过程,从绿色View开始,经过LinearLayout到RelativeLayout,每次传递都带有重绘区域信息,旨在实现局部刷新。
摘要由CSDN通过智能技术生成




    目的:通过一个Demo在所有自定义类中覆写所有invalidate开头的方法,打印LOG,看看Framework invalidate流程都执行了哪些方法



一 例子布局 与 树形结构图


            





二 先看看效果    源码下载




三 以上效果后台打出的LOG
View  invalidateDrawable(Drawable drawable)
View  invalidate , l = 0 , t = 0 , r = 90 , b = 90
LinearLayout  invalidateChildInParent Rect Left = 0, right = 90, top = 0, bottom = 90
LinearLayout Location 0 = 55
LinearLayout Location 1 = 55
RelativeLayout  invalidateChildInParent Rect Left = 55, right = 145, top = 55, bottom = 145
invalidateChildInParent Location 0 = 60
invalidateChildInParent Location 1 = 115



四  根据LOG,分析invalidate流程

1.  首先会触发绿色区域View的invalidate方法,并传入需重绘区域信息

View  invalidateDrawable(Drawable drawable)
View  invalidate , l = 0 , t = 0 , r = 90 , b = 90




2. 绿色区域view会把invalidate请求传递给黄色区域(LinearLayout),对传递重绘区域的信息

LinearLayout  invalidateChildInParent Rect Left = 0, right = 90, top = 0, bottom = 90
LinearLayout Location 0 = 55
LinearLayout Location 1 = 55



3. 黄色区域又把invalidate请求传递给蓝色区域(RelativeLayout),,对传递针对黄色区域的重绘信息

RelativeLayout  invalidateChildInParent Rect Left = 55, right = 145, top = 55, bottom = 145
invalidateChildInParent Location 0 = 60
invalidateChildInParent Location 1 = 115




五 总结 invalidate的传递流程

点击绿色区域,由绿色区域触发invalidate,首先传递给黄色区域带有区域信息,再传递给蓝色区域带有区域信息,含有区域信息的目的是仅重绘此区域。




评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值