recycleView(二)Grid,中间有间距,left,right,top,bottom没有间距

1.作用

1.效果图

item的top,bottom,right,left都是0
在这里插入图片描述

2.代码

1.关键代码

// 设置RecycleView的item间的间距,上下间距为20排序,左右间距为20排序
        binding.rv.addItemDecoration(object : RecyclerView.ItemDecoration() {
            override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) {
                val position = parent.getChildAdapterPosition(view) // 获取item的位置
                val spanCount = 2 // 列数
                val itemCount = parent.adapter?.itemCount ?: 0 // item总数
                val spacing = 20 // 间距
                val row = position / spanCount // 行号
                val lastRow = (itemCount - 1) / spanCount // 最后一行的行号
                //如果是第一列就设置right,如果是第二列就设置left就好了
                if (position%spanCount==0){
                    outRect.right=20
                }else{
                    outRect.left=20
                }
                if (row == 0) { // 如果是第一行,不设置上间距
                    outRect.top = 0
                } else { // 否则,设置上间距为20
                    outRect.top = spacing
                }
                if (row == lastRow) { // 如果是最后一行,不设置下间距
                    outRect.bottom = 0
                } else { // 否则,设置下间距为20
                    outRect.bottom = spacing
                }
            }
        })

2.大概代码

// 创建一个列表,用于存储数据
        val itemList = listOf(
            Item("Apple", R.drawable.ic_home_black_24dp),
            Item("Apple", R.drawable.ic_home_black_24dp),
            Item("Apple", R.drawable.ic_home_black_24dp),
            Item("Apple", R.drawable.ic_home_black_24dp),
            Item("Apple", R.drawable.ic_home_black_24dp),
            Item("Apple", R.drawable.ic_home_black_24dp),
            Item("Apple", R.drawable.ic_home_black_24dp),
            Item("Apple", R.drawable.ic_home_black_24dp),
            Item("Apple", R.drawable.ic_home_black_24dp),
            Item("Apple", R.drawable.ic_home_black_24dp),
            Item("Apple", R.drawable.ic_home_black_24dp),
            Item("Apple", R.drawable.ic_home_black_24dp),
            Item("Apple", R.drawable.ic_home_black_24dp),
            Item("Apple", R.drawable.ic_home_black_24dp),
            Item("Apple", R.drawable.ic_home_black_24dp),
            Item("Apple", R.drawable.ic_home_black_24dp),
            Item("Apple", R.drawable.ic_home_black_24dp),
            Item("Apple", R.drawable.ic_home_black_24dp),
            Item("Apple", R.drawable.ic_home_black_24dp),
            Item("Apple", R.drawable.ic_home_black_24dp),
            Item("Apple", R.drawable.ic_home_black_24dp),
            Item("Apple", R.drawable.ic_home_black_24dp),
            Item("Apple", R.drawable.ic_home_black_24dp),
            Item("Apple", R.drawable.ic_home_black_24dp),
            Item("Apple", R.drawable.ic_home_black_24dp),
            Item("Apple", R.drawable.ic_home_black_24dp),
            Item("Apple", R.drawable.ic_home_black_24dp),
            Item("Apple", R.drawable.ic_home_black_24dp),
            Item("Apple", R.drawable.ic_home_black_24dp),
            Item("Apple", R.drawable.ic_home_black_24dp),
            Item("Apple", R.drawable.ic_home_black_24dp),
            Item("Apple", R.drawable.ic_home_black_24dp),
            Item("Apple", R.drawable.ic_home_black_24dp)
        )

        // 设置RecycleView的布局管理器为GridLayoutManager,指定列数为2
        binding.rv.layoutManager = GridLayoutManager(activity, 2)

        // 设置RecycleView的适配器为ItemAdapter,传入列表数据
        binding.rv.adapter = ItemAdapter(itemList)

        // 设置RecycleView的item间的间距,上下间距为20排序,左右间距为20排序
        binding.rv.addItemDecoration(object : RecyclerView.ItemDecoration() {
            override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) {
                val position = parent.getChildAdapterPosition(view) // 获取item的位置
                val spanCount = 2 // 列数
                val itemCount = parent.adapter?.itemCount ?: 0 // item总数
                val spacing = 20 // 间距
                val row = position / spanCount // 行号
                val lastRow = (itemCount - 1) / spanCount // 最后一行的行号
                //如果是第一列就设置right,如果是第二列就设置left就好了
                if (position%spanCount==0){
                    outRect.right=20
                }else{
                    outRect.left=20
                }
                if (row == 0) { // 如果是第一行,不设置上间距
                    outRect.top = 0
                } else { // 否则,设置上间距为20
                    outRect.top = spacing
                }
                if (row == lastRow) { // 如果是最后一行,不设置下间距
                    outRect.bottom = 0
                } else { // 否则,设置下间距为20
                    outRect.bottom = spacing
                }
            }
        })

adapter与item

// 创建一个数据类,用于存储列表的数据
data class Item(val name: String, val image: Int)

// 创建一个适配器类,继承自RecyclerView.Adapter
class ItemAdapter(private val itemList: List<Item>) : RecyclerView.Adapter<ItemAdapter.ItemViewHolder>() {

    // 创建一个内部类,用于绑定视图和数据
    class ItemViewHolder(val binding: ItemLayoutBinding) : RecyclerView.ViewHolder(binding.root)

    // 重写onCreateViewHolder方法,用于创建视图
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
        val binding = ItemLayoutBinding.inflate(LayoutInflater.from(parent.context), parent, false)
        return ItemViewHolder(binding)
    }

    // 重写onBindViewHolder方法,用于绑定数据
    override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
        val item = itemList[position]
        holder.binding.itemName.text = item.name
        holder.binding.itemImage.setImageResource(item.image)
    }

    // 重写getItemCount方法,用于返回列表的大小
    override fun getItemCount(): Int {
        return itemList.size
    }
}

3.总结

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

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

相关文章

算法——滑动窗口

什么是窗口&#xff1f;就是符合题目要求的区域内的数据&#xff0c;将每次符合数据的窗口内的数据记录下来&#xff0c;然后将窗口后移&#xff0c;寻找其他符合要求的数据&#xff0c;每次进入窗口和退出窗口都需要一定的要求 一、 LCR 008. 长度最小的子数组 - 力扣&#…

数据结构—二叉树的模拟实现(c语言)

目录 一.前言 二.模拟实现链式结构的二叉树 2.1二叉树的底层结构 2.2通过前序遍历的数组"ABD##E#H##CF##G##"构建二叉树 2.3二叉树的销毁 2.4二叉树查找值为x的节点 2.5二叉树节点个数 2.6二叉树叶子节点个数 2.7二叉树第k层节点个数 三.二叉树的遍历 3.1…

Keras实现图注意力模型GAT

简介&#xff1a;本文实现了一个GAT图注意力机制的网络层&#xff0c;可以在Keras中像调用Dense网络层、Input网络层一样直接搭积木进行网络组合。 一&#xff0c;基本展示 如下图所示&#xff0c;我们输入邻接矩阵和节点特征矩阵之后&#xff0c;可以直接调用myGraphAttention…

C语言之pthread_once实例总结(八十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

史上最全最新Ubuntu20.04安装教程(图文)

总的来说&#xff0c;安装Ubantu包含以下三个步骤&#xff1a; 一、安装虚拟机 二、Ubuntu镜像下载 三、虚拟机配置 一、安装虚拟机 选择安装VMware Workstation&#xff0c;登录其官网下载安装包&#xff0c;链接如下&#xff1a; 下载 VMware Workstation Pro​www.vmwa…

设计模式之--原型模式(深浅拷贝)

原型模式 缘起 某天&#xff0c;小明的Leader找到小明:“小明啊&#xff0c;如果有个发简历的需求&#xff0c;就是有个简历的模板&#xff0c;然后打印很多份&#xff0c;要去一份一份展示出来&#xff0c;用编程怎么实现呢&#xff1f;” 小明一听&#xff0c;脑袋里就有了…

ARM64 linux并发与同步之内存屏障

1.2 内存屏障 1.2.1 概念理解 原理部分比较苦涩难懂&#xff0c;我们先不过多详细介绍这部分的由来和经过&#xff0c;接下来着重讲解什么用途和实现&#xff1b; ARM64架构中提供了3条内存屏障指令。 数据存储屏障(Data Memory Barrier, DMB)指令。数据同步屏障(Data Synch…

劲松HPV防治诊疗中心发布:HPV感染全面防治解决方案

在当今社会&#xff0c;HPV(人乳头瘤病毒)感染问题已成为广大公众关注的焦点。作为一种高度传染性的病毒&#xff0c;HPV感染不仅可能导致生殖器疣&#xff0c;还可能引发各种癌症。面对这一严重威胁&#xff0c;劲松HPV防治诊疗中心以其专业的医疗团队、正规的治疗流程和全方位…

Python基础入门例程51-NP51 列表的最大与最小(循环语句)

最近的博文&#xff1a; Python基础入门例程50-NP50 程序员节&#xff08;循环语句&#xff09;-CSDN博客 Python基础入门例程49-NP49 字符列表的长度-CSDN博客 Python基础入门例程48-NP48 验证登录名与密码&#xff08;条件语句&#xff09;-CSDN博客 目录 最近的博文&…

函数极限求解方法归纳

1、连续函数直接代入值&#xff08;加减不可以部分代入值&#xff09; 例题1 配凑构造等价无穷小 等价无穷小 注意&#xff1a;不要在加减中部分使用等价无穷小&#xff0c;可以利用拆极限的方式求&#xff0c;拆出来的每一部分都要有极限&#xff0c;如果有一部分没有极限就是…

STM32F4X定时器之通用定时器

一、STM32通用定时器概述 通用定时器包括一个16位或32位自动重载计数器&#xff0c;可通过可编程预分频器进行驱动。定时器可以实现多种功能&#xff0c;包括测量输入信号的脉冲宽度和生成输出波形&#xff0c;通过使用定时器预分频器和RCC时钟控制器预分频器&#xff0c;可以…

目标检测——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

目标检测概述 什么是目标检测&#xff1f; 滑动窗口&#xff08;Sliding Window&#xff09; 滑动窗口的效率问题和改进 滑动窗口的效率问题&#xff1a;计算成本很大 改进思路 1&#xff1a;使用启发式算法替换暴力遍历 例如 R-CNN&#xff0c;Fast R-CNN 中使用 Selectiv…

C++算法:完美矩形

题目 给你一个数组 rectangles &#xff0c;其中 rectangles[i] [xi, yi, ai, bi] 表示一个坐标轴平行的矩形。这个矩形的左下顶点是 (xi, yi) &#xff0c;右上顶点是 (ai, bi) 。 如果所有矩形一起精确覆盖了某个矩形区域&#xff0c;则返回 true &#xff1b;否则&#xf…

AI 绘画 | Stable Diffusion WebUI的基本设置和插件扩展

前言 Stable Diffusion WebUI是一个基于Gradio库的浏览器界面&#xff0c;用于配置和生成AI绘画作品&#xff0c;并且进行各种精细地配置。它支持目前主流的开源AI绘画模型&#xff0c;例如NovelAI/Stable Diffusion。 在基本设置方面&#xff0c;Stable Diffusion WebUI的默…

asp.net外卖网站系统VS开发mysql数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net外卖网站系统 是一套完善的web设计管理系统&#xff0c;系统采用mvc模式&#xff08;BLLDALENTITY&#xff09;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为mysql&#xff0c;使用c#语…

Git的原理与使用(一)

目录 Git初始 Git安装 Git基本操作 创建git本地仓库 配置git 工作区,暂存区,版本库 添加文件,提交文件 查看.git文件 修改文件 版本回退 小结 Git初始 git是一个非常强大的版本控制工具.可以快速的将我们的文档和代码等进行版本管理. 下面这个实例看理解下为什么需…

CountDownLatch和CyclicBarrier详解

1. CountDownLatch 1.1 简介 CountDownLatch 是 Java 中并发包&#xff08;java.util.concurrent&#xff09;提供的一种同步工具&#xff0c;用于在多线程环境中协调多个线程之间的执行顺序。它的作用是允许一个或多个线程等待其他线程完成操作。 CountDownLatch 通过一个计…

java使用geotools导出shp文件

SHP格式是一种矢量数据格式&#xff0c;用于存储地理信息系统&#xff08;GIS&#xff09;数据。 SHP文件由一系列有序的文件组成&#xff0c;我们导出的shp文件包括.shp、.shx、.dbf、.prj以及.fix文件。 .shp&#xff08;shape&#xff09;文件&#xff1a;存储矢量地图数据&…

自定义类型:联合和枚举

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 1. 联合体 1.1 联合体类型的声明 1.2 联合体的特点 1.3 相同成员的结构体和联合体对比 1.4 联合体大小的计算 1.5 联合的一个练习 2. 枚举类型 2.1 枚举类型的声明…

思维模型 目标效应

本系列文章 主要是 分享 思维模型&#xff0c;涉及各个领域&#xff0c;重在提升认知。明确目标&#xff0c;激发内在动机。 1 目标效应的应用 1.1 目标效应在教育领域的应用-棉花糖实验 美国斯坦福大学心理学系的教授米歇尔&#xff08;Walter Mischel&#xff09;曾经进行了…