万能RecyclerView分割线
发布时间 - 2026-01-10 22:20:01 点击率:次就不多叙述了,直接上代码
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.TypedValue;
import android.view.View;
public class DividerItemDecoration extends RecyclerView.ItemDecoration {
/*
* RecyclerView的布局方向,默认先赋值
* 为纵向布局
* RecyclerView 布局可横向,也可纵向
* 横向和纵向对应的分割想画法不一样
* */
private int mOrientation = LinearLayoutManager.VERTICAL;
/**
* item之间分割线的size,1---5
*/
private int mSize;
/**
* 绘制item分割线的画笔,和设置其属性
* 来绘制个性分割线
*/
private Paint mPaint;
/**
* 构造方法传入布局方向,不可不传
*
* @param context context
* @param orientation 布局方向
* @param color 颜色
* @param mItemSize item之间分割线的size
*/
public DividerItemDecoration(Context context, int orientation, int color, int mItemSize) {
this.mOrientation = orientation;
/*
item之间分割线的颜色
*/
this.mSize= mItemSize;
if (orientation != LinearLayoutManager.VERTICAL && orientation != LinearLayoutManager.HORIZONTAL) {
throw new IllegalArgumentException("LinearLayoutManager error");
}
mSize = (int) TypedValue.applyDimension(mItemSize, TypedValue.COMPLEX_UNIT_DIP, context.getResources().getDisplayMetrics());
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint.setColor(color);
/*设置填充*/
mPaint.setStyle(Paint.Style.FILL);
}
@Override
public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
if (mOrientation == LinearLayoutManager.VERTICAL) {
drawVertical(c, parent);
} else {
drawHorizontal(c, parent);
}
}
/**
* 绘制纵向 item 分割线
*
* @param canvas canvas
* @param parent parent
*/
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 + mSize;
canvas.drawRect(left, top, right, bottom, mPaint);
}
}
/**
* 绘制横向 item 分割线
*
* @param canvas canvas
* @param parent parent
*/
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 + mSize;
canvas.drawRect(left, top, right, bottom, mPaint);
}
}
/**
* 设置item分割线的size
*
* @param outRect outRect
* @param view view
* @param parent parent
* @param state state
*/
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
if (mOrientation == LinearLayoutManager.VERTICAL) {
outRect.set(0, 0, 0, mSize);
} else {
outRect.set(0, 0, mSize, 0);
}
}
}
调用的时候这样写:
复制代码 代码如下:mRecyclerView.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL, Color.RED,5));
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# RecyclerView
# 分割线
# RecyclerView底部分割线去除的方法
# android中RecyclerView自定义分割线实现
# Android RecyclerView网格布局(支持多种分割线)详解(2)
# RecyclerView消除底部分割线的方法
# RecyclerView的万能分割线
# 浅谈Android RecyclerView 间距全适配
# Android RecyclerView使用GridLayoutManager间距设置的方法
# RecyclerView设置间距和添加分割线的方法
# 不多
# 也可
# 大家多多
# 不传
# VERTICAL
# mOrientation
# item
# size
# error
# ItemDecoration
# extends
# applyDimension
# int
# private
# mSize
# mItemSize
# color
# amp
# throw
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
zabbix利用python脚本发送报警邮件的方法
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
如何在IIS管理器中快速创建并配置网站?
如何在腾讯云免费申请建站?
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
公司网站制作价格怎么算,公司办个官网需要多少钱?
百度浏览器如何管理插件 百度浏览器插件管理方法
如何快速建站并高效导出源代码?
大连 网站制作,大连天途有线官网?
Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门
Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境
如何在腾讯云服务器快速搭建个人网站?
如何做网站制作流程,*游戏网站怎么搭建?
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】
微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】
Android使用GridView实现日历的简单功能
Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载
5种Android数据存储方式汇总
零服务器AI建站解决方案:快速部署与云端平台低成本实践
香港服务器网站卡顿?如何解决网络延迟与负载问题?
如何打造高效商业网站?建站目的决定转化率
Laravel如何自定义分页视图?(Pagination示例)
如何自定义建站之星模板颜色并下载新样式?
宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程
Laravel如何生成和使用数据填充?(Seeder和Factory示例)
Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康
如何挑选高效建站主机与优质域名?
Laravel如何使用Blade组件和插槽?(Component代码示例)
Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】
制作企业网站建设方案,怎样建设一个公司网站?
长沙企业网站制作哪家好,长沙水业集团官方网站?
Laravel如何实现API版本控制_Laravel版本化API设计方案
郑州企业网站制作公司,郑州招聘网站有哪些?
Laravel如何使用Eloquent进行子查询
UC浏览器如何设置启动页 UC浏览器启动页设置方法
Laravel如何实现事件和监听器?(Event & Listener实战)
高防服务器租用首荐平台,企业级优惠套餐快速部署
网站制作价目表怎么做,珍爱网婚介费用多少?
laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法
如何在云指建站中生成FTP站点?
使用Dockerfile构建java web环境
Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】
node.js报错:Cannot find module 'ejs'的解决办法
Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言
Laravel如何处理和验证JSON类型的数据库字段
佛山网站制作系统,佛山企业变更地址网上办理步骤?
Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知
如何挑选优质建站一级代理提升网站排名?
Java遍历集合的三种方式

