RecyclerView机制解析: ItemDecoration

本文详细解析了RecyclerView的ItemDecoration机制,阐述了如何利用ItemDecoration实现divider、项目高亮和边框等效果。ItemDecoration可叠加,添加、删除或更新时会触发重新测量和布局。在ChildView的测量过程中,ItemDecoration通过measureChildWithMargins影响约束,而在布局阶段,通过layoutDecoratedWithMargins调整ChildView的位置。在绘制阶段,onDraw和onDrawOver回调分别在ChildView绘制前后进行,允许在整个Canvas上绘制。
摘要由CSDN通过智能技术生成
  1. RecyclerView的ItemDecoration机制相对比较简单,不过扩展性很强,在ChildView的测量和展示上为使用者提供了极大的发挥空间,像divider/项目高亮/项目边框等效果都可以轻松实现

  2. ItemDecoration可以同时存在复数个,维护在一个列表中,影响是可以叠加的,ItemDecoration的作用顺序从列表头到列表尾

    1. addItemDecoration可以添加一个ItemDecoration。
    2. removeItemDecoration可以删除一个ItemDecoration。
    3. invalidateItemDecorations表示当前的ItemDecoration发生了变化,需要更新。
    4. 因为RecyclerView**继承自ViewGroup,默认其willNoDraw是true(意味着其onDraw函数不会被调用),但是ItemDecoration的onDraw需要在RecyclerView的onDraw回调点进行,因此添加/删除ItemDecoraton时会根据情况改变willNotDraw属性**。
    5. 应为ItemDecoration会影响ChildView的测量,进而影响布局,还影响绘制,因此ItemDecoration的添加/删除/Invalidate会触发requestLayout来重新测量布局绘制.
    6. 在Scroll/Layout的过程中禁止添加/删除ItemDecoration
  3. 先看ItemDecoration是如何影响ChildView的测量:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值