首先自定义一个RecyclerViewDivider 继承 RecyclerView.ItemDecoration,实现自定义。

public class RecyclerViewDivider extends RecyclerView.ItemDecoration {
private Paint mPaint;
private Drawable mDivider;
private int mDividerSize = 2;//分割线高度,默认为1px
private int mOffsetStart = 0;
private int mOffsetEnd = 0;
private int mOrientation;//列表的方向:LinearLayoutManager.VERTICAL或LinearLayoutManager.HORIZONTAL
private static final int[] ATTRS = new int[]{android.R.attr.listDivider};

/**
* 默认分割线:高度为2px,颜色为灰色
*
* @param context
* @param orientation 列表方向
*/
private RecyclerViewDivider(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 RecyclerViewDivider(Context context, int orientation, int drawableId) {
this(context, orientation);
mDivider = ContextCompat.getDrawable(context, drawableId);
mDividerSize = mDivider.getIntrinsicHeight();
}

/**
* 自定义分割线
*
* @param context
* @param orientation 列表方向
* @param dividerSize 分割线高度
* @param dividerColor 分割线颜色
*/
public RecyclerViewDivider(Context context, int orientation, int dividerSize, @ColorRes int dividerColor) {
this(context, orientation);
mDividerSize = dividerSize;
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);

mPaint.setColor(context.getResources().getColor(dividerColor));
mPaint.setStyle(Paint.Style.FILL);
}

/**
* 自定义分割线
*
* @param context context
* @param orientation 列表方向
* @param dividerHeight 分割线高度
* @param dividerColor 分割线颜色
* @param offsetStart 起始偏移量
* @param offsetEnd 结束偏移量
*/
public RecyclerViewDivider(Context context, int orientation, int dividerHeight, @ColorRes int dividerColor, int offsetStart, int offsetEnd) {
this(context, orientation);
mDividerSize = dividerHeight;
mOffsetStart = Util.dp2px(context, offsetStart);
mOffsetEnd = Util.dp2px(context, offsetEnd);
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
if (dividerColor == 0) {
dividerColor = R.color.lightGray;
}
mPaint.setColor(context.getResources().getColor(dividerColor));
mPaint.setStyle(Paint.Style.FILL);
}

//重写此方法,防止设置的波纹背景把分隔线覆盖掉。
@Override
public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
RecyclerView.ViewHolder childViewHolder = parent.getChildViewHolder(view);
if (childViewHolder.getItemViewType() != 0) {
outRect.set(0, 0, 0, 0);
return;
}
if (mOrientation == LinearLayoutManager.HORIZONTAL) {
outRect.set(0, 0, 0, mDividerSize);
} else {
outRect.set(0, 0, mDividerSize, 0);
}
}

//绘制分割线
@Override
public void onDraw(@NonNull Canvas c, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
if (mOrientation == LinearLayoutManager.VERTICAL) {
drawVertical(c, parent);
} else {
drawHorizontal(c, parent);
}
}

//绘制横向 item 分割线
private void drawHorizontal(Canvas canvas, RecyclerView parent) {
final int left = parent.getPaddingLeft() + mOffsetStart;
final int right = parent.getMeasuredWidth() - (parent.getPaddingRight() + mOffsetEnd);
final int childSize = parent.getChildCount();
for (int i = 0; i < childSize - 1; i++) {
final View child = parent.getChildAt(http://www.my516.com);

RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams) child.getLayoutParams();
final int top = child.getBottom() + layoutParams.bottomMargin;
final int bottom = top + mDividerSize;
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 top = parent.getPaddingTop() + mDividerSize;
final int bottom = parent.getMeasuredHeight() - parent.getPaddingBottom() + mDividerSize;
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 + mDividerSize;
if (mDivider != null) {
mDivider.setBounds(left, top, right, bottom);
mDivider.draw(canvas);
}
if (mPaint != null) {
canvas.drawRect(left, top, right, bottom, mPaint);
}
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
举个例子:

rcyDetailsDelegation.addItemDecoration(new RecyclerViewDivider(getContext(), LinearLayoutManager.HORIZONTAL,
5, R.color.white, 8, 8));
1
2
其中提供一个 RecyclerViewDivider:
---------------------

转载于:https://www.cnblogs.com/hyhy904/p/10995871.html

Recyclerview设置间距相关推荐

  1. android网格布局间隙,RecyclerView网格布局瀑布流布局设置间距

    RecyclerView在网格布局或者瀑布流布局下,如果要设置间距,可以使用ItemDecoration. 下面的代码是设置显示两列数据RecyclerView的情况. cat.png @Overri ...

  2. ViewPager(六)让ViewPager用起来更顺滑——设置间距与添加转场动画

    用法概述: 1.换页监听与换页方法 2.懒加载及预加载定制 3.设置间距与添加转场动画 4.轮播.禁止滑动与指示器的配合 这篇和下一篇都是偏向技巧的东西,对于前端开发者来讲,开发的应用是直接面对用户的 ...

  3. RecyclerView设置分割线的两种方法

    方法一.在item条目布局中直接在底部设置一个View,背景设置成想要的分割线颜色,高度设置成1dp, 这个方法很简单,只是是小聪明啦.... 方法二.在给recyclerview设置各种参数的时候 ...

  4. 【RecyclerView】 九、为 RecyclerView 设置不同的布局样式

    文章目录 一.为 RecyclerView 设置不同的布局样式 二.完整代码 三.RecyclerView 相关资料 一.为 RecyclerView 设置不同的布局样式 为 RecyclerView ...

  5. php表格之间设置间隔,html表格如何设置间距

    html表格设置间距的方法:1.设置第一个tbale的[margin-bottom]属性,代码为[ 本教程操作环境:windows7系统.html5版,DELL G3电脑,该方法适用于所有品牌电脑. ...

  6. UICollectionViewCell的设置间距

    UICollectionViewCell的设置间距 #pragma mark - UICollectionView 大小(宽高,平均一行三个) - (CGSize)collectionView:(UI ...

  7. android 下拉刷新实现方式,Android RecyclerView设置下拉刷新的实现方法

    Android RecyclerView设置下拉刷新的实现方法 1 集成 SwipeRefreshLayout 1.1 xml布局文件中使用 android:id="@+id/refresh ...

  8. 18-CSS问题-让多个div横排显示并设置间距解决方案

    18-CSS问题-让多个div横排显示并设置间距解决方案 参考文章: (1)18-CSS问题-让多个div横排显示并设置间距解决方案 (2)https://www.cnblogs.com/Romant ...

  9. html怎么修改表格行列间距,html表格如何设置间距

    html表格设置间距的方法:1.设置第一个tbale的[margin-bottom]属性,代码为[ 本教程操作环境:windows7系统.html5版,DELL G3电脑,该方法适用于所有品牌电脑. ...

最新文章

  1. Hibernate in action阅读笔记-吵吵冷饭-ORM
  2. package org.springframework.stereotype包不存在
  3. Spring Cloud构建微服务架构:服务容错保护(Hystrix服务降级)
  4. Python爬虫(八)_正则表达式
  5. Java中的数据库架构导航
  6. 贡献开源项目没那么简单,你要负责到底
  7. mysql 5.5 性能测试,MySQL 5.5迁移到5.7的性能问题排查案例
  8. windows清除记住的密码
  9. shell脚本实例(随堂笔记)
  10. MySQL教程+视频
  11. 第十届“泰迪杯”挑战赛B题,获国家一等奖,提名国特,电力负荷预测及突变点检测分析论文、思路、程序分享
  12. 《软件方法》第1章 建模和UML
  13. 建站手册-网站构建:万维网联盟(World Wide Web Consortium)
  14. 车辆网相关政策和法律法规
  15. JavaScript自定义求和函数
  16. 从语音通话和视频通话两个方面搭建专属于自己的私有化部署的视频会议通话系统
  17. Oracle 安装包合集!
  18. 如何选择适合你的兴趣爱好(十九),养狗
  19. 符合ASTM标准的雨流计数法及其不同的改进方法
  20. 在电脑bios设置里开启虚拟化

热门文章

  1. 【NOIP2010】引水入城
  2. Mint17 FireFox重装英文版问题
  3. shell脚本参数$10问题
  4. 虚拟化,可实现国产化替代
  5. 现代教育技术课后作业(五)
  6. python 时间字符串和时间戳之间的转换
  7. HIve分组查询返回每组的一条记录
  8. 使用Python开发的POC多线程批量执行小框架
  9. 【阿里巴巴】CBU技术部招聘
  10. Jsp获得Map中map.put(2, bb);此类的value值