android listview分割线颜色,RecyclerView系列 - ListView样式分割线封装

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样式分割线的封装

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值