Android实现RecyclerView边缘渐变效果
Android实现RecyclerView边缘渐变效果
1.前言:
是指在RecyclerView中实现淡入淡出效果的边缘效果。通过这种效果,可以使RecyclerView的边缘在滚动时逐渐淡出或淡入,以提升用户体验。
2.Recyclerview属性:
2.1、requiresFadingEdge:属性用来设置拉滚动条时 ,边框渐变的方向。
- none(边框颜色不变)
- horizontal(水平方向颜色变淡)
- vertical(垂直方向颜色变淡)
2.2、fadingEdgeLength:用来设置边框渐变的长度
<androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/rv_effect"android:layout_width="0dp"android:layout_height="0dp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"android:fadingEdgeLength="40dp"android:fadingEdge="vertical"android:requiresFadingEdge="vertical"tools:listitem="@layout/item_effect"android:padding="15dp"/>
3.简单适配器:
package com.cloud.recyclervieweffectdemo.adapterimport android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.cloud.recyclervieweffectdemo.R
import com.cloud.recyclervieweffectdemo.bean.EffectBean/*** @author: njb* @date: 2024/12/10 23:14* @desc: 描述*/
class EffectAdapter(private val dataList: MutableList<EffectBean>) : RecyclerView.Adapter<EffectAdapter.EffectViewHolder>() {override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): EffectViewHolder {val view = LayoutInflater.from(parent.context).inflate(R.layout.item_effect,parent,false)return EffectViewHolder(view)}override fun getItemCount(): Int {return dataList.size}override fun onBindViewHolder(holder: EffectViewHolder, position: Int) {val data = dataList[position]holder.textView.text = data.name}class EffectViewHolder(itemView: View) :RecyclerView.ViewHolder(itemView){val textView:TextView = itemView.findViewById(R.id.tv_name)val ivAvatar:ImageView = itemView.findViewById(R.id.iv_avatar)}
}
4.实体类:
package com.cloud.recyclervieweffectdemo.bean/*** @author: njb* @date: 2024/12/10 23:16* @desc: 描述*/
data class EffectBean(var name:String = "",var avatar:String = ""
)
5.主界面布局:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/main"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/rv_effect"android:layout_width="0dp"android:layout_height="0dp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"android:fadingEdgeLength="40dp"android:fadingEdge="vertical"android:requiresFadingEdge="vertical"tools:listitem="@layout/item_effect"android:padding="15dp"/></androidx.constraintlayout.widget.ConstraintLayout>
6.item布局:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="wrap_content"><ImageViewandroid:id="@+id/iv_avatar"android:layout_width="wrap_content"android:layout_height="wrap_content"android:scaleType="fitCenter"android:src="@mipmap/ic_girl"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /><androidx.appcompat.widget.AppCompatTextViewandroid:id="@+id/tv_name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="天地"android:textColor="@color/black"android:textSize="24sp"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/iv_avatar" />
</androidx.constraintlayout.widget.ConstraintLayout>
7.测试代码:
竖向渐变
package com.cloud.recyclervieweffectdemoimport android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.cloud.recyclervieweffectdemo.adapter.EffectAdapter
import com.cloud.recyclervieweffectdemo.bean.EffectBeanclass MainActivity : AppCompatActivity() {private var adapter:EffectAdapter ?= nullprivate var dataList:MutableList<EffectBean> ?= nullprivate val rvEffect:RecyclerView by lazy { findViewById(R.id.rv_effect) }override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)initData()initAdapter()}private fun initData() {val effectBean = EffectBean()dataList = ArrayList()for(i in 1..15){effectBean.name = "小麦"effectBean.avatar = "222"dataList?.add(effectBean)}}private fun initAdapter() {adapter = dataList?.let { EffectAdapter(it) }rvEffect.layoutManager = LinearLayoutManager(this)rvEffect.adapter = adapter}
}
8.横向渐变:
package com.cloud.recyclervieweffectdemoimport android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.cloud.recyclervieweffectdemo.adapter.EffectAdapter
import com.cloud.recyclervieweffectdemo.bean.EffectBeanclass MainActivity : AppCompatActivity() {private var adapter:EffectAdapter ?= nullprivate var dataList:MutableList<EffectBean> ?= nullprivate val rvEffect:RecyclerView by lazy { findViewById(R.id.rv_effect) }override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)initData()initAdapter()}private fun initData() {val effectBean = EffectBean()dataList = ArrayList()for(i in 1..15){effectBean.name = "小麦"effectBean.avatar = "222"dataList?.add(effectBean)}}private fun initAdapter() {adapter = dataList?.let { EffectAdapter(it) }rvEffect.layoutManager = LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false)rvEffect.adapter = adapter}
}
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/main"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/rv_effect"android:layout_width="0dp"android:layout_height="0dp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"android:fadingEdgeLength="40dp"android:fadingEdge="horizontal"android:requiresFadingEdge="horizontal"tools:listitem="@layout/item_effect"android:padding="15dp"/></androidx.constraintlayout.widget.ConstraintLayout>
9.实现效果:


10.demo地址:
https://gitee.com/jackning_admin/recycler-view-effect-demo
相关文章:
Android实现RecyclerView边缘渐变效果
Android实现RecyclerView边缘渐变效果 1.前言: 是指在RecyclerView中实现淡入淡出效果的边缘效果。通过这种效果,可以使RecyclerView的边缘在滚动时逐渐淡出或淡入,以提升用户体验。 2.Recyclerview属性: 2.1、requiresFading…...
springboot443旅游管理系统(论文+源码)_kaic
摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统旅游管理系统信息管理难度大,容错率低&#…...
利用git上传项目到GitHub
GitHub是基于git实现的代码托管。git是目前最好用的版本控制系统了,非常受欢迎,比之svn更好。 GitHub可以免费使用,并且快速稳定。 利用GitHub,你可以将项目存档,与其他人分享交流,并让其他开发者帮助你一…...
Rust之抽空学习系列(四)—— 编程通用概念(下)
Rust之抽空学习系列(四)—— 编程通用概念(下) 1、函数 函数用来对功能逻辑进行封装,能够增强复用、提高代码的可读 以下是函数的主要组成部分: 名称参数返回类型函数体 1.1、函数名称 在Rust中&…...
K-Means 聚类:数据挖掘的瑞士军刀
引言 在数据科学领域,聚类算法是一种非常重要的无监督学习方法,它能够帮助我们发现数据中的自然分组或模式。其中,K-Means 聚类算法因其简单高效而成为最常用的聚类算法之一。无论是市场细分、社交网络分析,还是图像分割等领域&a…...
项目练习:若依-前端项目的目录结构介绍
文章目录 一、目录截图二、目录讲解 一、目录截图 二、目录讲解 1、首先,我们可以看到,这个VUE项目,只有一个App.vue,所以,它是一个单页面系统。 这个App.vue是根组件,root组件。 2、public目录 在Vue 3.…...
知网研学 | 知网文献(CAJ+PDF)批量下载
知网文献(CAJPDF)批量下载 一、知网研学安装二、插件及脚本安装三、CAJ批量下载四、脚本下载及PDF批量下载浏览器取消拦截窗口 一、知网研学安装 批量下载知网文件,格式为es6文件,需使用知网研学软件打开,故需先安装该…...
设计模式期末复习
一、设计模式的概念以及分类 二、设计模式的主题和意图 三、面向对象程序设计原则,记住名字,还要理解它的使用场景以及如何用? 四、松耦合、紧耦合、强关联、弱关联、静态复用、动态复用的概念,还有静态委派,动态委…...
CentOS7源码编译安装nginx+php+mysql
1.安装nginx 安装依赖 yum -y install gcc gcc-c wget automake autoconf libtool libxml2-devel libxslt-devel perl-devel perl-ExtUtils-Embed pcre-devel openssl openssl-devel 创建一个不能登录的nginx运行用户 groupadd www-data useradd -s /sbin/nologin -g www-d…...
linux CentOS系统上卸载docker
一、停止Docker服务 首先,需要停止Docker服务。使用systemctl命令来停止Docker服务: bash复制代码sudo systemctl stop docker二、卸载Docker软件包 接下来,使用CentOS的包管理器yum来卸载Docker软件包。根据安装的Docker版本和组件&#…...
css中相对定位的应用场景
元素位置微调 文本与图标组合微调:在网页设计中,经常会有文本和图标的组合,比如一个带有搜索图标的搜索框。可以使用相对定位来微调图标在搜索框内的位置。例如,有以下HTML结构: <input type"text" class…...
Android 获取屏幕物理尺寸
注:编译 sdk 需要使用 30 因为引入了 WindowMetrics、uild.VERSION_CODES.R 新 sdk 才存在的类和属性 某些场景处理 view ,对 view 显示的位置要求比较精确,通常我们使用context.getResources().getDisplayMetrics().widthPixels 获取到的宽、…...
C缺陷与陷阱 — 8 编译与链接
目录 1 程序的编译过程 2 动态链接的优缺点 2.1 动态链接的优点 2.2 动态链接的缺点 2.3 只使用动态链接 3 函数库链接的5个特殊秘密 4 警惕Interpositioning 5 产生链接器报告文件 1 程序的编译过程 程序的编译过程是将源代码转换成计算机可以执行的机器代码的过程。…...
知识分享第三十天-力扣343.(整数拆分)
343 整数拆分 给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。 示例 1: 输入: 2 输出: 1 解释: 2 1 1, 1 1 1。 示例 2: 输入: 10 输出: 36 解释: 10 3 3 4, 3 3 4 36。 说明: 你可…...
Springboot 整合DL4J 打造智能写作助手(文本生成)
项目准备 环境要求: Java 1.8或以上 Maven 或 Gradle(用于项目管理) Spring Boot框架 DL4J库(DeepLearning4J) 创建 Spring Boot 项目 使用 Spring Initializr 来生成一个新的 Spring Boot 项目。选择合适的依赖,例如…...
SPL06 基于stm32F103 HAL库驱动(软件模拟IIC)
talk is cheap, show you my code SPL06.c #include "SPL06.h"//*************全局变量*************// Factor_List* b_list; //存储过采样率对应的系数KP,KT COEF_ValueStruct Coefficient { 0 }; //存储校准系数…...
【C#】List求并集、交集、差集
值类型List List<int> intList1 new List<int>() { 1, 2, 3 };List<int> intList2 new List<int>() { 3, 4, 5 };var result intList1.Union(intList2);Console.WriteLine($"并 {string.Join(,,result)}");result intList1.Intersect(in…...
YOLOv8目标检测——详细记录使用ONNX Runtime进行推理部署C++/Python实现
概述 在之前博客中有介绍YOLOv8从环境安装到训练的完整过程,本节主要介绍ONNX Runtime的原理以及使用其进行推理加速,使用Python、C两种编程语言来实现。 https://blog.csdn.net/MariLN/article/details/143924548?spm1001.2014.3001.5501 1. ONNX Ru…...
mfc140u.dll是什么文件?如何解决mfc140u.dll丢失的相关问题
遇到“mfc140u.dll文件丢失”的错误通常影响应用程序的运行,这个问题主要出现在使用Microsoft Visual C环境开发的软件中。mfc140u.dll是一个重要的系统文件,如果它丢失或损坏,会导致相关程序无法启动。本文将简要介绍几种快速有效的方法来恢…...
Redis篇-19--运维篇1-主从复制(主从复制,读写分离,配置实现,实战案例)
1、概述 Redis的主从复制(Master-Slave Replication)是一种数据冗余机制,它允许将一台Redis服务器的数据复制到其他Redis服务器。在主从复制中,有一台主服务器(Master)和一个或多个从服务器(Sl…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
go 里面的指针
指针 在 Go 中,指针(pointer)是一个变量的内存地址,就像 C 语言那样: a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10,通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...
Ubuntu系统复制(U盘-电脑硬盘)
所需环境 电脑自带硬盘:1块 (1T) U盘1:Ubuntu系统引导盘(用于“U盘2”复制到“电脑自带硬盘”) U盘2:Ubuntu系统盘(1T,用于被复制) !!!建议“电脑…...
