ItemDecoration类的使用

ItemDecoration直译“条目装饰品”,顾名思义,其主要用于给RecyclerView的每条item添加装饰,可以理解为分割线,但是决不仅限于分割线,实际上比分割线会的多。

RecyclerView没有提供divide属性,为RecyclerView添加分割线需要使用RecyclerView的addItemDecoration方法。这里主要写ItemDecoration的自定义方法。

RecyclerView有三个重写方法,分别是getItemOffsetsonDrawonDrawOver。其中getItemOffsets主要用于在ItemView(Item的实际视图)四周撑开空间;onDraw主要用于在ItemView下方进行绘制;onDrawOver主要用于在ItemView上方进行绘制。

getItemOffsets(Rect outRect,View view,RecyclerView parent,RecyclerView.State state):此方法作用于每个ItemView,使用时直接分别用outRect.top=x、outRect.bottom=x、outRect.left=x、outRect.right=x在ItemView的上下左右方向撑出x像素的空间,效果类似于给每个Item的视图添加了padding值,视图向中间收缩。此方法直接对每个Item生效,参数中的view为当前Item的视图,只需处理特殊项,无需遍历。(如首项尾项可能分别不需要上分割线和下分割线,此时无需为他们撑开上下空间。需要注意的是被撑开的空间属于当前Item,并不是独立的视图)

onDraw(Canvas c,RecyclerView parent,RecyclerView.State state):此方法用于在Item视图的下层空间进行绘制,直接用Canvas进行绘制即可,注意这个方法中绘制的内容显示在Item的视图下层,因此可能被Item的视图遮挡住,所以一定要在getItemOffsets方法撑开的空白区域内进行绘制。这个方法的参数中并没有提供每个Item的视图,所以为每个Item绘制时要通过遍历拿到要绘制的Item的视图,根据视图的位置确定Decoration的绘制位置。

onDrawOver(Canvas c,RecyclerView parent,RecyclerView.State state):此方法用于在Item视图的上层空间进行绘制,使用方法和onDraw方法相同,不同的是由于此方法绘制的内容在显示在Item的视图上层,因此可能会遮挡Item的视图内容。所以使用时一定要把内容绘制在正确的位置上,不要遮挡了界面上的有效内容。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值