RecyclerView分割线的技巧

真的很简单,因为方法别人都已经写好了,不多说了还是看源码:

package com.xiayiye.yhsh.recyclerviewdemo;import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;/*** 创 建 者:下一页5(轻飞扬)* 创建时间:2018/1/3.14:52* 个人小站:http://wap.yhsh.ai* 联系作者:企鹅 13343401268* 博客地址:http://blog.csdn.net/xiayiye5* 类的包名:com.xiayiye.yhsh.recyclerviewdemo* 项目名称: AndroidStudio3.0*/public class RecycleViewDivider extends RecyclerView.ItemDecoration {private Paint mPaint;private Drawable mDivider;private int mDividerHeight = 2;//分割线高度,默认为1pxprivate int mOrientation;//列表的方向:LinearLayoutManager.VERTICAL或LinearLayoutManager.HORIZONTALprivate static final int[] ATTRS = new int[]{android.R.attr.listDivider};/*** 默认分割线:高度为2px,颜色为灰色** @param context* @param orientation 列表方向*/public RecycleViewDivider(Context context, int orientation) {if (orientation != LinearLayoutManager.VERTICAL && orientation != LinearLayoutManager.HORIZONTAL) {throw new IllegalArgumentException("请输入正确的参数!");}mOrientation = orientation;final TypedArray a = context.obtainStyledAttributes(ATTRS);mDivider = a.getDrawable(0);a.recycle();}/*** 自定义分割线** @param context* @param orientation 列表方向* @param drawableId  分割线图片*/public RecycleViewDivider(Context context, int orientation, int drawableId) {this(context, orientation);mDivider = ContextCompat.getDrawable(context, drawableId);mDividerHeight = mDivider.getIntrinsicHeight();}/*** 自定义分割线** @param context* @param orientation   列表方向* @param dividerHeight 分割线高度* @param dividerColor  分割线颜色*/public RecycleViewDivider(Context context, int orientation, int dividerHeight, int dividerColor) {this(context, orientation);mDividerHeight = dividerHeight;mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);mPaint.setColor(dividerColor);mPaint.setStyle(Paint.Style.FILL);}//获取分割线尺寸@Overridepublic void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {super.getItemOffsets(outRect, view, parent, state);outRect.set(0, 0, 0, mDividerHeight);}//绘制分割线@Overridepublic void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {super.onDraw(c, parent, state);if (mOrientation == LinearLayoutManager.VERTICAL) {drawVertical(c, parent);} else {drawHorizontal(c, parent);}}//绘制横向 item 分割线private void drawHorizontal(Canvas canvas, RecyclerView parent) {final int top = parent.getPaddingTop();final int bottom = parent.getMeasuredHeight() - parent.getPaddingBottom();final int childSize = parent.getChildCount();for (int i = 0; i < childSize; i++) {final View child = parent.getChildAt(i);RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams) child.getLayoutParams();final int left = child.getRight() + layoutParams.rightMargin;final int right = left + mDividerHeight;if (mDivider != null) {mDivider.setBounds(left, top, right, bottom);mDivider.draw(canvas);}if (mPaint != null) {canvas.drawRect(left, top, right, bottom, mPaint);}}}//绘制纵向 item 分割线private void drawVertical(Canvas canvas, RecyclerView parent) {final int left = parent.getPaddingLeft();final int right = parent.getMeasuredWidth() - parent.getPaddingRight();final int childSize = parent.getChildCount();for (int i = 0; i < childSize; i++) {final View child = parent.getChildAt(i);RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams) child.getLayoutParams();final int top = child.getBottom() + layoutParams.bottomMargin;final int bottom = top + mDividerHeight;if (mDivider != null) {mDivider.setBounds(left, top, right, bottom);mDivider.draw(canvas);}if (mPaint != null) {canvas.drawRect(left, top, right, bottom, mPaint);}}}
}

那么这么用呢?、很简单,这里涉及到单个构造方法,根据下面的调用就好了

添加默认分割线:高度为2px,颜色为灰色

mRecyclerView.addItemDecoration(new RecycleViewDivider(mContext, LinearLayoutManager.VERTICAL));
  • 1

添加自定义分割线:可自定义分割线drawable

mRecyclerView.addItemDecoration(new RecycleViewDivider(mContext, LinearLayoutManager.VERTICAL, R.drawable.divider_mileage));
  • 1
  • 2

添加自定义分割线:可自定义分割线高度和颜色

mRecyclerView.addItemDecoration(new RecycleViewDivider(mContext, LinearLayoutManager.VERTICAL, 10, getResources().getColor(R.color.divide_gray_color)));

这个还是我看的别人的博客稍微改了下方向,非常感谢博主,

因为原博客你会发现设置的方向弄反了

原地址博客地址

还是不懂得可以下载源码查看源码地址点击即可下载

注意:

大家下载demo导入基本会报错,因为我用的Android studio3.0最新版本写的,不过没事解决很简单,修改下gradle版本即可,不懂得可咨询我谢谢。

RecyclerView分割线的技巧相关推荐

  1. Android零基础入门第65节:RecyclerView分割线开发技巧

    2019独角兽企业重金招聘Python工程师标准>>> 在上一期通过简单学习,已经领略到了RecyclerView的灵活性,当然都是一些最基础的用法,那么本期一起来学习Recycle ...

  2. 万能RecyclerView分割线扩展

    该万能分割线参考自博客:RecyclerView的万能分割线_pengkv的博客-CSDN博客_android recyclerview 分割线 在他的基础上添加了距离左右边距的属性. recycle ...

  3. RecyclerView分割线

    闲来无事,把自己弄的一个RecyclerView分割线,整理一下,贴上来,当做笔记,方便自己以后查看. 使用方法: 一.添加默认分割线:默认纵向布局.高度为2.灰色, rv.addItemDecora ...

  4. Android 活用RecyclerView分割线

    1.ItemDecoration简介 Recyclerview是我们日常开发中使用频率比较高的的控件,而其中的ItemDecoration作为布局装饰又能很方便的帮助我们定义分割线,列表排行效果以及设 ...

  5. RecyclerView --- 分割线

    [记录]记录点滴 [需求]简单使用分割线与自定义分割线 1. 利用DividerItemDecoration, 简单实现分割线 2. 基于RecyclerView.ItemDecoration,自定义 ...

  6. RecyclerView 分割线和 Item默认增删动画

    虽然RecyclerView出现已经有一段时间了,但是还是想要自己总结一下,总的来说其基本使用方法: 你想要控制其显示的方式,请通过布局管理器LayoutManager; 你想要控制Item间的间隔( ...

  7. Android零基础入门第68节:完善RecyclerView,添加首尾视图

    2019独角兽企业重金招聘Python工程师标准>>> 在之前学习ListView的时候,有学习过如何给ListView添加列表头和列表尾.但是通过近几期的学习,发现Recycler ...

  8. android 表格控件点击事件,Android零基础入门|RecyclerView点击事件处理

    原标题:Android零基础入门|RecyclerView点击事件处理 前面两期学习了RecyclerView的简单使用,并为其item添加了分割线.在实际运用中,无论是List还是Grid效果,基本 ...

  9. Android零基础入门第77节:Activity任务栈和启动模式

    2019独角兽企业重金招聘Python工程师标准>>> 通过前面的学习,Activity的基本使用都已掌握,接下来一起来学习更高级的一些内容. Android采用任务栈(Task)的 ...

最新文章

  1. 洛谷P2234 [HNOI2002]营业额统计(01Tire树)
  2. 《统一沟通-微软-实战》-7-配置-3-响应组
  3. idea tomcat热部署_IDEA设置热部署
  4. Linux--轻松定义自己的RPM/DEB软件包
  5. (转)jQuery 基础
  6. mysql服务器默认操作字符集,如何在mysql中找到默认服务器字符集?
  7. 【算法基础笔记】常用的排序算法的时间、空间复杂度,部分排序算法原理
  8. python-opencv图像处理之SIFT尺度不变特征变换
  9. 转载:从地理学透视中国现代化
  10. tamami来解答国内防辐射服为什么越卖越火
  11. java支付宝转账到银行卡_Java 支付宝支付,退款,单笔转账到支付宝账户(单笔转账到支付宝账户)...
  12. 算法题_寻找最大连通区域
  13. html页面的src引用网络图片无法显示
  14. 神兽保佑,永无bug!
  15. 线性光耦(PC817)工作的分析
  16. 在java中如何输入角度_在Java中获取角度的反余弦
  17. 卫星图瓦片爬取之google卫星图偏移的问题
  18. Ceph运维告诉你分布式存储的那些“坑”
  19. window安装ab压力测试
  20. ME2188A33M3G 高效、同步的PFM升压直流-直流转换器

热门文章

  1. 成功解决tensorflow.keras: AttributeError: ‘str‘ object has no attribute ‘decode‘
  2. 基于c语言画图软件,大佬们,小菜鸟想问一问用vc编译器做简易画图软件
  3. 最大均值差异java_MATLAB最大均值差异(Maximum Mean Discrepancy)
  4. linux是数据库软件么,什么是适用于Linux的良好数据库ERD工具?
  5. 随机抽样java_java生成抽样随机数的多种算法
  6. 报错注入_sqli-labs less5 Double Query- Single Quotes- String
  7. 20220209-CTF MISC-BUUCTF-难易程度:简单
  8. mysql 外键(foreign key)的详解和实例_MySQL数据库外键
  9. linux下hg无法运行_在 Windows 里也可以访问 Linux 子系统文件了
  10. 好吧,又是两分钟看完一道投机取巧的算法题