android 顺滑滑动嵌套布局

1. 背景

最近项目中用到了上面的布局,于是使用了scrollview+recycleview,为了自适应高度,重写了recycleview,实现了高度自适应:

public class CustomRecyclerView extends RecyclerView {public CustomRecyclerView(@NonNull Context context) {super(context);}public CustomRecyclerView(@NonNull Context context, @Nullable AttributeSet attrs) {super(context, attrs);}@Overrideprotected void onMeasure(int widthSpec, int heightSpec) {int height = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);super.onMeasure(widthSpec, height);}
}

这也是通常将列表控件高度自适应的处理方法。

但是效果有点卡顿,表现为可以滑动,但没了滑动的惯性、每次滑动的距离几乎一样、不跟手。

2. 优化

开始从adapter上着手:

1. 优化了inflater初始化:放到了adapter构造方法中,比,避免每次调用view。inflate时都创建新的Layoutinflater

private LayoutInflater mInflater;  
  
public YourAdapter(Context context) {  
    mContext = context;  
    mInflater = LayoutInflater.from(context);  
    // ... 其他初始化代码 ...  

2. 优化了布局的渲染:根据item类型加载,如下

 @NonNull@Overridepublic RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {if (viewType == INDEX_TYPE_EVALUATE) {View evaluateView = mInflater.inflate(R.layout.index_group_adapter_layout_1, null);return new IndexGroupItemEvaluateHolder(evaluateView, INDEX_TYPE_EVALUATE);} else {View normalView = mInflater.inflate(R.layout.index_group_adapter_layout, null);return new IndexGroupItemNormalHolder(normalView, INDEX_TYPE_NORMAL);}}

3. 优化onBindViewHolder:不要在该方法中重复调用getItemViewType(position),因为recycle已经根据getItemViewType的结果为viewholder分配了类型。

@Override  
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {  if (holder instanceof IndexGroupItemNormalHolder) {  IndexGroupItemNormalHolder h = (IndexGroupItemNormalHolder) holder;  h.bind(mTeamList.get(position), true, Gravity.CENTER);  } else if (holder instanceof IndexGroupItemEvaluateHolder) {  IndexGroupItemEvaluateHolder h = (IndexGroupItemEvaluateHolder) holder;  h.bind(mTeamList.get(position), false, Gravity.CENTER_VERTICAL);  }  
}

效果并不理想,滑动依然不顺畅。

3.解决

在通过“文心一言”的帮助后,修改布局:将普通的scrollview改为nestedscrollview,恢复自定义的高度自适应的recycleview为普通recycleview

然后滑动丝滑流畅

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【HTTP】面试题整理

HTTP:什么是队头阻塞以及怎么解决? 队头阻塞(Head-of-Line Blocking) 计算机网络中的一个概念,特别是在处理HTTP请求时。当多个HTTP请求被发送到一个服务器,并且这些请求被放置在一个队列中等待处理时&…

c# 除法运算 ;/运算符;%运算符

1.c# 除法运算 ,且保留小数 (13*1.0f) / 6 结果 2.1666666666666665 2.C# 保留小数位数的方法 转自:https://www.cnblogs.com/abeam/p/8406054.html 前言 本文主要介绍 C# 中实现小数位数的保留,完成对小数位数四舍五入的几种方法。 1.…

iview 不请求接口修改table本地数据 不刷新的本质问题以及最简单的解决方法

在日常的开发中,相信大家都遇到过这样的问题,通过请求接口,而后赋值table数据,页面都是正常的刷新渲染的,但是有时,不需要请求接口,只修改本地的固定数据的话,页面的table表格数据却…

2024年旅游经济与文化传播国际会议(ICTECC 2024)

2024年旅游经济与文化传播国际会议(ICTECC 2024) 2024 International Conference on Tourism Economy and Cultural Communication 会议简介: 旅游经济与文化传播之间存在密切的关系。旅游经济是以旅游活动为依托,通过旅游资源…

【每日力扣】 修剪二叉搜索树与复原 IP 地址

🔥 个人主页: 黑洞晓威 😀你不必等到非常厉害,才敢开始,你需要开始,才会变的非常厉害。 669. 修剪二叉搜索树 给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树&am…

Git 仓库瘦身与 LFS 大文件存储

熟悉 Git 的小伙伴应该都知道随着 Git 仓库维护的时间越来越久,追踪的文件越来越多,git 存储的 objects 数量会极其庞大,每次从远程仓库 git clone 的时候都会墨迹很久。如果我们不小心 git add 了一个体积很大的文件,且 git push…

Linux和Windows类似的命令

以下是一些常用的Linux命令,它们类似于Windows的cmd命令: Windows cmd 命令 对应的 Linux 命令 dir ls cd cd copy cp del rm mkdir mkdir rmdir …

Linux系统(四)- 进程初识 | 环境变量 | 进程地址空间

~~~~ 前言冯诺依曼体系结构(重要)总览CPU工作方式什么是指令集?CPU为什么只和内存打交道(数据交换)?木桶效应:在数据层面的结论程序运行为什么要加载到内存? 进一步理解计算机体系结…

MySQL—数据库导入篇

什么是数据库? 数据库是干啥的? 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。 MySQL属于哪一类数据库? MySQL是一种关系型数据库。所谓的关系型数据库,是建立在关系模型基础上的数据库&a…

java项目打包(maven+原生)

一、maven打jar包 1.1 没有第三方依赖的jar java -jar maven项目打包提示.jar中没有主清单属性 <build><finalName>${project.artifactId}</finalName><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifact…

Cesium:绘制一个 3DTiles 对象的外包盒顶点

作者:CSDN @ _乐多_ 本文将介绍如何使用 Cesium 引擎根据模型的中心坐标,半轴信息,绘制一个 3DTiles 对象的外包盒顶点。 外包盒是一个定向包围盒(Oriented Bounding Box),它由一个中心点(center)和一个包含半轴(halfAxes)组成。半轴由一个3x3的矩阵表示,这个矩阵…

学习python笔记:9,with,requests,os,set,list,enumerate,numpy.array

with语句 在Python中&#xff0c;with语句用于确保某段代码执行完毕时&#xff0c;资源&#xff08;如文件对象、网络连接等&#xff09;可以被正确地清理。这通常涉及到使用上下文管理协议&#xff0c;该协议要求一个对象实现__enter__()和__exit__()两个方法。 with语句的基…

常见视频名词及视频格式

常见视频名词 时长&#xff1a;视频时间单位&#xff0c;基本单位&#xff1a;秒&#xff0c;常见格式&#xff1a;00:00:00:00&#xff08;时&#xff1a;分&#xff1a;秒&#xff1a;帧&#xff09; 帧&#xff1a;视频的基础单位 视频也是一帧一帧组成的&#xff0c;他是…

Java安全基础 关键概念过关

Java安全基础 关键概念汇总 文章目录 Java安全基础 关键概念汇总前置知识1.构造器this以及包的使用2.继承3.重写/ 重载 / super4.多态5.区分和equals方法6.toString的使用7.Object的概念8.static,final,代码块static代码块final 9.动态代理10.类的动态加载1)类加载器含义&#…

卷积篇 | YOLOv8改进之C2f模块融合SCConv | 即插即用的空间和通道维度重构卷积

前言:Hello大家好,我是小哥谈。SCConv是一种用于减少特征冗余的卷积神经网络模块。相对于其他流行的SOTA方法,SCConv可以以更低的计算成本获得更高的准确率。它通过在空间和通道维度上进行重构,从而减少了特征图中的冗余信息。这种模块的设计可以提高卷积神经网络的性能。本…

常用的vim和linux命令

常用的vim命令和linux命令 vim编辑器有三种模式 命令模式、编辑模式、末行模式 模式间切换方法&#xff1a; 1.命令模式下&#xff0c;输入&#xff1a;后&#xff0c;进入末行模式 2.末行模式下&#xff0c;按esc慢退、按两次esc快退、或者删除所有命令&#xff0c;可以回…

如何正确从github上下载数据集等内容

文章目录 一、现象&#xff1a;二、解决方案 一、现象&#xff1a; 数据集点击下载没有反应&#xff0c;那需要怎么下载数据集呢&#xff1f; 二、解决方案 输入以下命名行&#xff0c;亲测有效 git clone https://github.com/mymusise/ChatGLM-Tuning.git

LeetCode每日一题[C++]-1793.好子数组的最大分数

题目描述 给你一个整数数组 nums &#xff08;下标从 0 开始&#xff09;和一个整数 k 。 一个子数组 (i, j) 的 分数 定义为 min(nums[i], nums[i1], ..., nums[j]) * (j - i 1) 。一个 好 子数组的两个端点下标需要满足 i < k < j 。 请你返回 好 子数组的最大可能…

【ADF4351】使用FPGA进行SPI寄存器配置、使用FPGA计算各个频率的频点,ADF4351配置程序

简介 特性 输出频率范围&#xff1a;35 MHz至4,400 MHz 小数N分频频率合成器和整数N分频频率合成器 具有低相位噪声的VCO 可编程的1/2/4/8/16/32/64分频输出 典型抖动&#xff1a;0.3 ps rms EVM(典型值&#xff0c;2.1 GHz)&#xff1a; 0.4% 电源&#xff1a;3.0 V至3.6 V …

Selenium 自动化 —— 使用WebDriverManager自动下载驱动

上一篇文章 入门和 Hello World 实例 中&#xff0c;我们提供了一个最简单的 Selenium 上手的例子。 但是某一天&#xff0c;突然发现相同的代码居然运行报错了。这是怎么回事呢&#xff1f; 日志排查 日志中其实提示的很明显了&#xff1a;Chrome浏览器和Chrome WebDriver的…