关于RecyclerView的瀑布流 分割线左右间距问题

记录一下开发遇到的RecyclerView 的 瀑布流 左右间距设置问题。

在GridLayoutManager中 ,item的布局顺序为

在这里插入图片描述
在该布局中,他的index就是左右左右,position所对应的itemView就是准确的。即 左0,右1,左2,右3,以此类推…
但是如果是瀑布流,则会是另外一种顺序
在这里插入图片描述
可以看出瀑布流的position是根据列的高度来加载下一个position在哪里。所以我们会看到,左0,右1 之后,2到右边了,那是因为

第二列的高度小于第一列的高度,所以就加载到第二列,以此类推, 下面的高度可以说就是随机展示的,谁也不知道接下来要怎么判断分割线。
我们可以通过StaggeredGridLayoutManager.LayoutParams 里的getSpanIndex()来判断,这个方法不管你高度怎样, 他都是左右左右开始排列的。

/**
 * @param space 每个item的左右间距
 * @param spanCount 一行中 item的个数
 * */
class CostomizeItemDecoration(val space:Int,val spanCount:Int) : RecyclerView.ItemDecoration() {
    override fun getItemOffsets(
        outRect: Rect,
        view: View,
        parent: RecyclerView,
        state: RecyclerView.State
    ) {
        super.getItemOffsets(outRect, view, parent, state)
        if (view.layoutParams is StaggeredGridLayoutManager.LayoutParams){
            staggerdGridLayout(view, outRect)
        }else if (view.layoutParams is GridLayoutManager.LayoutParams){
            gridLayout(parent, view, outRect)
        }

    }

    private fun gridLayout(
        parent: RecyclerView,
        view: View,
        outRect: Rect
    ) {
        if (parent.getChildLayoutPosition(view) % spanCount == 0) {
            outRect.left = space
            outRect.right = space / spanCount
        } else {
            outRect.left = space / spanCount
            outRect.right = space;
        }
    }

    private fun staggerdGridLayout(view: View, outRect: Rect) {
        val params = view.layoutParams as? StaggeredGridLayoutManager.LayoutParams
        if ((params?.spanIndex ?: 0) % spanCount == 0) {
            outRect.left = space
            outRect.right = space / spanCount
        } else {
            outRect.left = space / spanCount
            outRect.right = space
        }
    }

}

参考自:

Recyclerview之瀑布流分割线左右间距均等问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/169483.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

建议收藏《Verilog代码规范笔记_华为》

华为verilog编程规范是坊间流传出来华为内部的资料,其贴合实际工作需要,是非常宝贵的资料,希望大家善存。至于其介绍,在此不再赘述,大家可看下图详细了解,感兴趣的可私信移知教育老师领取《Verilog代码规范…

Colab跑项目

这里写目录标题 Colab文件目录路径显示更改colab当前工作文件夹Colab挂载谷歌云盘colab使用命令(从这开始看,前面no zuo no die)最紧要,首先,修改笔记本设置使用启用gpu![在这里插入图片描述](https://img-blog.csdnimg.cn/591a6c…

qsort

qsort void*修饰后pv不能1&#xff0c;-1也不能解引用 例子 /* qsort example */ #include <stdio.h> /* printf */ #include <stdlib.h> /* qsort */int values[] { 40, 10, 100, 90, 20, 25 };int compare (const void * a, const void * b) {return…

指针变量和地址

A.指针变量和地址 理解了内存和地址的关系&#xff0c;我们再回到C语⾔&#xff0c;在C语⾔中创建变量其实就是向内存申请空间&#xff0c;比如&#xff1a; #include <stdio.h> int main() {int a 10;return 0; } ⽐如&#xff0c;上述的代码就是创建了整型变量a&…

Threejs_05 几何体顶点索引

Threejs中的任何一个几何体都是由若干个索引点构成的&#xff0c;然后这些索引点其实构成的都是三个坐标的三角形。 使用顶点坐标构建几何体 1.我们需要一个支持几何体属性的物料 //创建几何体(三角形) const geometry new THREE.BufferGeometry(); 2.构造一个顶点坐标组 …

51单片机直流电机控制

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pwm波形&#xff1f;1.1高低电平交互&#xff0c;LED亮灭。1.2 驱动电机时&#xff1f;1.3 怎么调节电机的速度&#xff1f; 二、怎么用51单片机产生PWM波形…

OpenVPN Connect使用连接公网VPN服务器实现内网穿透

安装并运行OpenVPN Connect 点击AGREE 添加配置.OVPN文件 点击连接 连接成功 两个内网主机通过公网VPN穿透

哪些软件可以监控电脑(保姆级教程!值得收藏!)

今天了解到了一个软件&#xff0c;真的把我吓到了。 我才知道原来我上班时摸鱼时多么愚蠢的一件事情。原来老板可以通过一些软件轻而易举的知道你用电脑做的所有事情&#xff0c;怪不得我每次摸鱼时老板看我的眼神都不对…… 安装好域之盾软件以后&#xff0c;打开就能监控你使…

电容的耐压值是什么意思呢?

电容是什么&#xff1f; 电容是一种能以电荷的形式储存能量的装置。与同样大小的电池相比&#xff0c;电容能储存的能量要小得多&#xff0c;大约1w个电容存储的能量才顶一节电池存储的能量&#xff0c;但对于许多电路设计来说却足够使用了。 看下图的直插式电容&#xff0c;…

竞赛 题目:基于深度学习的中文汉字识别 - 深度学习 卷积神经网络 机器视觉 OCR

文章目录 0 简介1 数据集合2 网络构建3 模型训练4 模型性能评估5 文字预测6 最后 0 简介 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的中文汉字识别 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &a…

[JDK工具-2] javap 类文件解析工具-帮助理解class文件,了解Java编译器机制

文章目录 1. javap -version 版本信息2. javap -verbose 输出附加信息3. javap -l 显示行号和局部变量列表4. javap -c 对代码进行反汇编&#xff08;或叫反编译生成汇编代码&#xff0c;一般说反编译是生成java代码&#xff09;&#xff0c;分解方法代码&#xff0c;也就是显示…

OSG文字-显示汉字 (1)

OSG文字 适当的文字信息对于显示场景信息是非常重要的。在 OSG中&#xff0c;osgText 提供了向场景中添加文字的强大功能&#xff0c;由于有第三方插件 FreeType 的支持&#xff0c;它完全支持TrueType字体。 读者可能对 FreeType和TrueType还不太了解&#xff0c;下面进行具体…

Openlayer【二】—— 绘制不同的点、线以及给其添加监听事件

Openlayer【二】—— 绘制不同的点、线以及给其添加监听事件 接上篇&#xff1a;OpenLayer初始化 在openlayer当中&#xff0c;图层Layer与地图源Source是一对一的关系。当创建了一个图层Layer&#xff0c;相应的需要给图层添加地图源Source&#xff0c;然后将图层Layer添加到…

企业经营好不好?看看官方评价指标(适电子元、器件制造业)

一家企业经营的到底好不好&#xff1f;有没有评价标准呢&#xff1f;这里我们不妨参考一下国资委对全国各个行业的考核指标&#xff0c;对照一下自己的企业&#xff0c;就比较清楚自身企业的经营水平了。另外&#xff0c;我们也希望使用ODOO-ERP业财一体系统的企业&#xff0c;…

docker swarm集群部署

文章目录 前言一、安装docker1.1 解压1.2 配置docker 存储目录和dns1.3 添加docker.service文件1.4 docker 启动验证 二、docker swarm 集群配置2.1 关闭selinux2.2 设置主机名称并加入/etc/hosts2.3 修改各个服务器名称&#xff08;uname -a 进行验证&#xff09;2.4 初始化sw…

Java-类和类的关系

代码 总结&#xff1a; 【1】面向对象的思维&#xff1a;找参与者&#xff0c;找女孩类&#xff0c;找男孩类 【2】体会了什么叫方法的形参&#xff0c;什么叫方法的实参&#xff1a; 具体传入的内容 实参&#xff1a; 【3】类和类可以产生关系&#xff1a; &#xff08;1…

Django(九、choices参数的使用、多对多表的三种创建方式、Ajax技术)

文章目录 一、choices参数choices参数的用法choices 参数用法总结 二、MVC与MTV模式1.MVC2.MTV 三、多对多的三种创建方式1.全自动创建2.纯手动创建半自动创建 四、Django与Ajax1.什么是Ajax常见的场景Ajax案例 一、choices参数 在没有用到choices参数之前&#xff0c;我们在D…

如何科学的进行Android包体积优化

这篇文章会分享小厂如何做包体积优化相关主题&#xff0c;涉及内容包括&#xff1a;1) Android包体积优化的一种可能是比较标准的推进做法&#xff0c;2) 大致流程的心路历程和思考方式&#xff0c;3) 如何去总结和分享你们进行过的包体积优化项目。本文不仅仅是一篇分享&#…

PCIe协议加持,SD卡9.1规范达到媲美SSD的速度4GB/s

近日&#xff0c;SD协会&#xff08;SDA&#xff09;宣布了最新的SD Express存储卡的进化&#xff0c;将microSD Express存储卡的速度提高了一倍&#xff0c;达到2GB/s&#xff0c;并引入了4个新的SD Express速度等级&#xff0c;以确保新的SD 9.1规范中最低的顺序性能水平。这…

【自动驾驶解决方案】C++取整与保留小数位

一、C基础 1.1double型保留小数为&#xff0c;并以字符输出 #include <iostream> #include <sstream> #include <iomanip> // 包含std::fixedint main() {//浮点数double number 3.1415926;//转换工具类streamstd::stringstream stream;stream << s…