当前位置: 首页 > 科技观察

为什么要用道具装饰

时间:2023-03-16 13:03:20 科技观察

稀土掘金,这是一款面向技术开发者的应用,你可以在掘金上获得优质的技术干货,不仅仅是Android知识,前端,后端如此之多以至于无论是产品还是涉及到设计,想成为全栈工程师的朋友不要错过!第1部分:不要使用视图作为分界线首先,什么是ItemDecoration?我们来看看官网是怎么解释的。ItemDecoration允许从适配器的数据集合中为特定项目视图添加特征绘图和布局间距。可以用来实现item之间的分割线,高亮显示,分组边界等,我们不能简单的把ItemDecoration当成一个名字响亮的分割线。它的内容比分频器多得多。只能在项目之间绘制分隔线,但可以在项目的四个边上绘制ItemDecoration。ItemDecoration提供对装饰品的测量和绘制的完全控制。装饰可以是一条分界线,也可以只是一个间隔(插图)。但遗憾的是,绝大多数android开发者并没有使用itemdecoration。在这个由三部分组成的系列中,我们将了解ItemDecoration的强大功能。***部分:不添加视图作为分界线—使用ItemDecorationPartII:不使用padding做间隔—使用ItemDecorationPartIII:在GridLayoutManager中高效绘制装饰本文为***部分。不要使用视图作为分隔符——它会影响性能。我看到一些开发人员在向RecyclerView添加分隔线时采取了一些捷径。原因很简单,ListView原生支持divider,直接在xml中设置divider即可。但是要RecyclerView,你不能再直接添加divider了。需要添加一个ItemDecoration来绘制分隔线。但是开发人员觉得很麻烦,所以他直接将分隔线添加到(项目的)视图中,而不是使用ItemDecoration。每当我们走捷径时,都有可能产生副作用。而这里的副作用是它可能会影响性能。在布局中添加分隔线时,我们会增加视图的数量。我们都知道浏览次数越少,性能越好。有时添加视图来实现分隔符也会增加布局的层次。例如,在上面的例子中,我们不仅添加了视图,还添加了包含它们的线性布局。为分隔线创建了一个额外的布局。不要使用view作为分界线——它会带来副作用,因为divider是view的一部分,所以在item动画的时候,divider也会跟着一起动。如下图所示:显然分隔线不应该随着项目一起动画。相反,与项目分开,这样是对的:不要使用视图作为分界线——缺乏灵活性如果分隔线是(项目)视图的一部分,那么您将无法控制它。您唯一可以控制的是根据项目的位置更改分隔线的可见性状态。项目装饰更加灵活。在上图中,组分隔符中的最后一个项目填满了整个宽度。其他分隔线的左侧边距为56dp。这是ItemDecorator的onDraw代码。整个宽度。所有其他分隔线的左边距为56dp。这是这个ItemDecorator的onDraw代码:@OverridepublicvoidonDraw(Canvascanvas,RecyclerViewparent,RecyclerView.Statestate){canvas.save();finalintleftWithMargin=convertDpToPixel(56);finalintright=parent.getWidth();finalintchildCount=parent.getChildCount();对于(inti=0;i