全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

万能RecyclerView分割线

就不多叙述了,直接上代码

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 


相关文章: 建站之星导航菜单设置与功能模块配置全攻略  郑州企业网站制作公司,郑州招聘网站有哪些?  七夕网站制作视频,七夕大促活动怎么报名?  定制建站平台哪家好?企业官网搭建与快速建站方案推荐  如何用好域名打造高点击率的自主建站?  建站之星Pro快速搭建教程:模板选择与功能配置指南  如何选择高效可靠的多用户建站源码资源?  免费公司网站制作软件,如何申请免费主页空间做自己的网站?  家庭服务器如何搭建个人网站?  建站之星如何开启自定义404页面避免用户流失?  如何快速搭建个人网站并优化SEO?  网站制作公司,橙子建站是合法的吗?    香港服务器选型指南:免备案配置与高效建站方案解析  高端建站如何打造兼具美学与转化的品牌官网?  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  php8.4新语法match怎么用_php8.4match表达式替代switch【方法】  广平建站公司哪家专业可靠?如何选择?  如何快速重置建站主机并恢复默认配置?  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?  建站之星后台密码如何安全设置与找回?  如何使用Golang安装API文档生成工具_快速生成接口文档  上海网站制作开发公司,上海买房比较好的网站有哪些?  天津个人网站制作公司,天津网约车驾驶员从业资格证官网?  网站制作员失业,怎样查看自己网站的注册者?  如何通过山东自助建站平台快速注册域名?  如何用5美元大硬盘VPS安全高效搭建个人网站?  高端建站三要素:定制模板、企业官网与响应式设计优化  c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】  广州商城建站系统开发成本与周期如何控制?  已有域名和空间,如何快速搭建网站?  C#怎么创建控制台应用 C# Console App项目创建方法  网站制作知乎推荐,想做自己的网站用什么工具比较好?  网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?  建站之星客服服务时间及联系方式如何?  html制作网站的步骤有哪些,iapp如何添加网页?  建站之星如何实现五合一智能建站与营销推广?  西安专业网站制作公司有哪些,陕西省建行官方网站?  如何获取上海专业网站定制建站电话?  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  如何用wdcp快速搭建高效网站?  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  如何在阿里云完成域名注册与建站?  如何用低价快速搭建高质量网站?  网站企业制作流程,用什么语言做企业网站比较好?  如何选择可靠的免备案建站服务器?  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  Python文件管理规范_工程实践说明【指导】  高性能网站服务器部署指南:稳定运行与安全配置优化方案 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。