万能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 &#39;ejs&#39;的解决办法  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  Laravel如何处理和验证JSON类型的数据库字段  佛山网站制作系统,佛山企业变更地址网上办理步骤?  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  如何挑选优质建站一级代理提升网站排名?  Java遍历集合的三种方式