首页 > 其他分享 >RecyclerView如何设置分割线颜色

RecyclerView如何设置分割线颜色

时间:2024-06-11 18:34:51浏览次数:19  
标签:颜色 orientation parent int 分割线 RecyclerView final


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.view.View;

import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;


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

/**
* 默认分割线:高度为2px,颜色为灰色
*
* @param context
* @param orientation 列表方向
*/
public SpaceColorItemDecoration(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 SpaceColorItemDecoration(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 SpaceColorItemDecoration(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);
}


//获取分割线尺寸
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
outRect.set(0, 0, 0, mDividerHeight);
}

//绘制分割线
@Override
public 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 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);
}
}
}

//绘制横向 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);
}
}
}

}
LinearLayoutManager linearLayoutManagerv1 = new LinearLayoutManager(getActivity());
linearLayoutManagerv1.setOrientation(LinearLayoutManager.VERTICAL);
recycler.setLayoutManager(linearLayoutManagerv1);
recycler.addItemDecoration(new SpaceColorItemDecoration(getActivity(), LinearLayoutManager.VERTICAL,
        CommonUtil.dip2px(getActivity(),5),Color.parseColor("#F4F4F4")));

参考https://blog.csdn.net/pengkv/article/details/50538121

标签:颜色,orientation,parent,int,分割线,RecyclerView,final
From: https://www.cnblogs.com/kinoyo/p/18242543

相关文章

  • Android RecyclerView使用详解(含通过网络请求得到数据)
    RecyclerView概述RecyclerView是Android中非常受欢迎的控件,RecyclerView是官方在Android5.0之后新添加的控件,推出用来替代传统的ListView和GridView列表控件,所以如果你还在使用ListView的话可以替换为RecyclerView了。对于RecyclerView的使用根据实际项目进行说明,一些功能可......
  • python后端结合uniapp与uview组件tabs,实现自定义导航按钮与小标签颜色控制
    实现效果(红框内):后端api如下:@task_api.route('/user/task/states_list',methods=['POST','GET'])@visitor_token_requireddeftask_states(user):name_list=['待接单','设计中','交付中','已完成','......
  • 颜色找茬-0-255随机底色
      代码展示'''颜色找茬:找出不同颜色的色块AI对话大师,阿夏2025年6月7日'''fromPILimportImage,ImageDrawimportrandompath=r'C:\Users\jg2yXRZ\OneDrive\桌面\辨认色彩图'forxxinrange(10000):r=random.randint(0,255)......
  • allegro 关于电路板布局颜色的个人设置
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、Allegro设计参数编辑里关于显示的一些设置1.显示or不显示电镀焊盘2.显示OR不显示非电镀焊盘3.显示无焊盘孔4.显示OR不显示连接点5.显示填充焊盘6.显示连线末端线路结束端点7.显示......
  • Android RecyclerView 获取当前滚动到的Item项
    背景:RecyclerView 左右滑动时,需要获取当前显示在页面上的选项卡步骤:1.RecyclerView  添加addOnScrollListener,回调中可以直接获取对应ItemIndexxxxRecyclerView.addOnScrollListener(newRecyclerView.OnScrollListener(){ @Override publicvoidonScrollStateChang......
  • 如何使用 css 变量来包含与另一个变量一起使用的混合颜色
    我在css(由sass生成)中创建了名为--secondary的变量,其值为red(#f00)我想为不透明度创建更多变量,如--secondary-100和--secondary-90。我想为不透明度创建更多变量,如--secondary-100,--secondary-90......
  • 小程序,选择颜色,去水印
    //在页面中添加一个canvas组件<canvascanvas-id="myCanvas"bindtap="handleTap"></canvas>//在页面的js文件中处理图片Page({ data:{  imgUrl:'',//存储用户选择的图片路径  startX:0,//用户指定区域的起始坐标X  startY:0,//用户指定区域的起始......
  • 基于Matlab国外汽车牌照和颜色识别
    欢迎大家点赞、收藏、关注、评论啦,由于篇幅有限,只展示了部分核心代码。文章目录一项目简介二、功能三、系统四.总结一项目简介  一、项目背景与意义随着全球智能交通系统(ITS)的迅速发展,车牌识别和车辆颜色识别成为了该领域的重要技术。在国外的交通管理、......
  • dotnet C# 创建 X11 应用时设置窗口背景颜色
    本文将告诉大家如何在X11里面创建一个窗口时,设置窗口的背景颜色在dotnetC#设置X11应用窗口背景透明的基础上,可以通过创建XColor结构体,将XColor赋值给到XSetWindowAttributes的background_pixel进行设置窗口的初始化背景颜色核心实现如下先创建XColor结构体,代......
  • 如何在 ImageMap 热点上应用边框和更改边框颜色
    我渲染了一幅图像,并提供了定义了图像映射的热点。我还添加了鼠标悬停事件监听器,以便使用focus()来突出显示热点。我希望在加载图像后显示边框,并在用户点击热点时改变边框的颜色。点击功能可通过标签上的事件监听器实现,但要使边框显示出来似乎有点棘手。如果您对此有任何帮......