RecycleView深入理解系列之ItemDecoration
来源:互联网 发布:剑雨江湖灵骑进阶数据 编辑:程序博客网 时间:2024/06/10 04:53
首先我们要理解ItemDecoration是什么?它能干什么呢?
我们在使用RecycleView的时候会发现,它不像ListView一样有divider可以给每个Item设置分割线,那么它是怎么实现分割线呢?通常情况下,我们比较快捷简单的方法就是给每个Item的布局设置margin来实现它。但是我们可以通过下面的方法添加分割线:
mRecyclerView.addItemDecoration()
RecycleView.ItemDecoration
RecycleView.ItemDecoration为抽象类,它有三个主要的方法:
onDraw(Canvas c, RecyclerView parent, State state)
onDrawOver(Canvas c, RecyclerView parent, State state)
getItemOffsets(Rect outRect, View view, RecyclerView parent, State state)
getItemOffsets:
每一个子view在设置itemDecoration的时候都会进入这个回调,可以通过设置第一个参数Rect,为子view增加padding值,例如outRect.set(10,20,30,40)
,即为子view左边距增加10,上边距增加20,右边距增加30,下边距增加40。
为什么要增加边距?
是否增加边距可以由开发者自己决定。
如果绘制的装饰内容是在item的上下左右空白处,则为item增加边距再绘制装饰才不会遮盖住item原本显示的内容。
如果绘制的装饰内容是直接遮盖在item上面的,例如为item绘制半透明遮罩,这种情况则不需要为item增加边距。
个人对这个方法的理解:简单说你要绘制多大多高多宽的装饰线,就要在这里设置多大的偏移量,不然你绘制的就会覆盖在下一个Item上。
onDraw 以及 onDrawOver:
关于这两个方法的原理,这里不会太具体的解释,只需要记住: decoration 的 onDraw,child view 的 onDraw,decoration 的 onDrawOver,这三者是依次发生的。
也就是说,onDraw绘制的内容会在子item的下面,onDrawOver绘制的内容会在子item的上面,至于装饰内容要放在下面被子item覆盖,还是要放在上面覆盖子item由具体场景决定。
个人对这两个方法的理解:对这两个方法的理解,最好根据层和执行顺序来理解。
onDraw先执行也就是先绘制,所以Item就在它上面绘制着,如果getItemOffsets没有设置好,Item就会覆盖它,你就看不到效果。
反之onDrawOver就不用考虑这个了,就只用考虑每个ItemDecoration的rect就行了。
理解了这三个方法,其他的就是根据需求来搭建自己的逻辑代码了,这里我就不一一描述了。度娘上有一大堆ItemDecoration的效果。
推荐几篇关于ItemDecoration的个人感觉还不错的博客。
Piasy 的RecycleView深入理解之ItemDecoration
自定义ItemDecoration
ItemDecoration详解
ItemDecoration由浅及深
- RecycleView深入理解系列之ItemDecoration
- 深入理解 RecyclerView 系列之一:ItemDecoration
- 深入理解 RecyclerView 系列之一:ItemDecoration
- Recycleview的itemdecoration使用
- RecycleView-自定义分割线-ItemDecoration
- 深入理解mysql之BDB系列
- PHP学习系列之深入理解MVC
- 深入理解javascript系列之序章
- 深入理解Tomcat系列之三:Connector
- 深入理解JavaScript系列之设计模式
- RecycleView自定义ItemDecoration,实现时间轴效果
- 深入理解JavaScript系列
- 深入理解JavaScript系列
- 深入理解JavaScript系列
- 深入理解android 系列
- 深入理解JavaScript系列
- 深入理解JavaScript系列
- 深入理解JavaScript系列
- pwnable.tw记录之applestore
- GIT学习笔记(5)
- Java高级篇-9-继承
- 30天了解30种技术系列(14)----Docker集群管理利器Swarm
- okhttp源码解析
- RecycleView深入理解系列之ItemDecoration
- C++程序设计案例实训教程 前言
- 页面弹框,禁止背景元素滚动(只禁止了mousewheel事件,鼠标还是可以拖动的)
- 【JZOJ 5439】【NOIP2017提高A组集训10.31】Calculate
- 刚用上Ubuntu,nginx和php搭建,phpsotrm和xdebug
- 大数据之MapReduce详解(MR的运行机制及配合WordCount实例来说明运行机制)
- eova开发几个低级问题
- 并查集模版
- vue项目中,main.js,App.vue,index.html如何调用