android listview分割线颜色,RecyclerView系列

编程入门 行业动态 更新时间:2024-10-09 19:14:50

android listview分割线<a href=https://www.elefans.com/category/jswz/34/1771046.html style=颜色,RecyclerView系列"/>

android listview分割线颜色,RecyclerView系列

1. 说明

基于我们上节课讲解的给RecyclerView设置分割线的方法后,我相信大家已经对如何给RecyclerView添加分割线已经有了自己的思考,和想法,其实很简单,就是给每个item留出位置,然后用画笔来画分割线,在正式开发项目过程中,有时候分割线很简单,就是一条线,有时候可能会是一张图片,所以在这边为了可扩展性好,我们画分割线实际上还是画的是Drawable,这样的话:

如果分割线是画一条线,我们就直接在在drawable下边画shape形状为矩形,高度为1dp的就行;

如果分割线是画一张图片,我们就直接在drawable下边引用一张图片就行;

2. ListView分割线的封装

具体实现:

2.1 自定义LinearLayoutItemDecoration继承自RecyclerView.ItemDecoration然后重写构造方法、getItemOffsets()和onDraw()方法

2.2 具体方法含义:

构造方法传递参数:

context,资源id

getItemOffsets():

给item的顶部留出位置,用onDraw()来画分割线,注意不要给第0个位置的item的上边来画分割线,从第一个item的位置开始画分割线;

onDraw():

画分割线

自定义LinearLayoutItemDecoration具体代码如下:

/**

* Created by JackChen on 2018/3/3.

* ListView样式的分割线

*/

public class LinearLayoutItemDecoration extends RecyclerView.ItemDecoration {

private Drawable mDriver ;

// 网上绝大部分用的系统的一个属性 叫做 android.R.attrs.listDriver ,这个也可以,需要在清单文件中配置

public LinearLayoutItemDecoration(Context context , int drawableRescourseId){

// 解析获取 Drawable

mDriver = ContextCompat.getDrawable(context , drawableRescourseId) ;

}

// 在这里 就把RecyclerView.ItemDecoration的2个方法同样拷贝进来

@Override

public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {

// 代表在每个item底部的位置留出10px 来绘制分割线 , 效果可以实现,问题是最后一个item还有分割线

int position = parent.getChildAdapterPosition(view);

// 代表你要在哪个位置上边留出位置来

// 留出头部位置 ,不为第0个位置的item留出位置,即就是从第一个item开始给上边留出的位置

if (position != 0){

outRect.top = mDriver.getIntrinsicHeight() ; //表示 mDrawable有多高,就在头部留出多高

}

}

// 绘制分割线

@Override

public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {

// 利用canvas想绘制什么就绘制什么

// 在每一个item的头部来绘制

int childCount = parent.getChildCount() ;

// 指定绘制的区域

Rect rect = new Rect() ;

rect.left = parent.getPaddingLeft() ;

rect.right = parent.getWidth() - parent.getPaddingRight() ;

// 头部第一个不需要绘制分割线,所以直接从第二个开始

for (int i = 1; i < childCount; i++) {

// 分割线的底部就是 item的头部

rect.bottom = parent.getChildAt(i).getTop() ;

rect.top = rect.bottom - mDriver.getIntrinsicHeight() ;

mDriver.setBounds(rect);

mDriver.draw(c);

}

}

}

2.3 最后直接在recycler_view的setAdapter下边直接调用recycler_view.addItemDecoration(new LinearLayout(this , R.drawable.item_divider_01)) ;

注意:

如果分割线是一条线,直接在item_divider_01中:

android:shape="rectangle" // 矩形

>

/>

android:centerColor="@color/bg"

android:endColor="@color/colorAccent"

/>

如果分割线是一张图片的话,就直接把item_divider_01换成1张图片就行

ok,ListView样式分割线就是这样,怎么样,很简单吧,步骤就是四步:

第一步:自定义LinearLayoutItemDecoration继承RecyclerView.ItemDecoration,然后复写构造方法和2个方法,分别是getItemOffsets()和onDraw();

第二步:在getItemOffsets()方法是在每个item顶部留出位置;

第三步:在onDraw()方法中画分割线;

第四步:最后在recycler_view.setAdapter中直接调用recycler_view.addItemDecoration(new LinearLayoutItemDecoration( this , R.drawable.item_divider_01)) ; 即可;

这个就是ListView分割线的封装,那么下节课我们就来一起实现下GridView样式分割线的封装

更多推荐

android listview分割线颜色,RecyclerView系列

本文发布于:2024-02-28 00:37:37,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1766982.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:颜色   分割线   系列   android   listview

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!