Android RecyclerView 实现快速滚动的示例代码
时间:2022-07-27
本文章向大家介绍Android RecyclerView 实现快速滚动的示例代码,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
简评:Android Support Library 26 中终于实现了一个等待已久的功能: RecyclerView 的快速滚动 。
Android 官方早就在建议开发者使用 RecyclerView 替代 ListView,RecyclerView 也确实表现要好于 ListView,除了没有快速滚动,就像下面这样:
因此,之前要想在 RecyclerView 上实现快速滚动,往往是依赖第三方库,比如:FutureMind/recycler-fast-scroll 或 timusus/RecyclerView-FastScroll 。
现在 RecyclerView 终于原生支持了快速滚动,现在就让我们来看一下怎么实现:
首先,在 build.gradle 中添加依赖:
dependencies {
....
compile 'com.android.support:design:26.0.2'
compile 'com.android.support:recyclerview-v7:26.0.2'
....
}
注意 Support Library 从版本 26 开始移到了 Google 的 maven 仓库,并且 Google 计划未来将所有的仓库都只通过 http:// maven.google.com 来发布。所以,需要参考 官方指南 使用 Google Maven 仓库。
现在,来看一看具体怎么实现 RecyclerView 的快速滚动:
<?xml version="1.0" encoding="utf-8"?
<android.support.constraint.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:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.shaishavgandhi.fastscrolling.MainActivity"
tools:showIn="@layout/activity_main"
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:fastScrollEnabled="true"
app:fastScrollHorizontalThumbDrawable="@drawable/thumb_drawable"
app:fastScrollHorizontalTrackDrawable="@drawable/line_drawable"
app:fastScrollVerticalThumbDrawable="@drawable/thumb_drawable"
app:fastScrollVerticalTrackDrawable="@drawable/line_drawable"
</android.support.v7.widget.RecyclerView
</android.support.constraint.ConstraintLayout
其中增加了几个属性:
- fastScrollEnabled: boolean 类型,决定是否启用快速滚动,当设置为 true 时需要设置下面的四个属性。
- fastScrollHorizontalThumbDrawable: 水平滚动块。
- fastScrollHorizontalTrackDrawable: 水平滚动栏背景。
- fastScrollVerticalThumbDrawable: 竖直滚动块。
- fastScrollVerticalTrackDrawable: 竖直滚动栏背景。
接下来看一下具体的 drawable:
line_drawable.xml
<?xml version="1.0" encoding="utf-8"?
<selector xmlns:android="http://schemas.android.com/apk/res/android"
<item
android:state_pressed="true"
android:drawable="@drawable/line"/
<item
android:drawable="@drawable/line"/
</selector
line.xml
<?xml version="1.0" encoding="utf-8"?
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"
<solid android:color="@android:color/darker_gray" /
<padding
android:top="10dp"
android:left="10dp"
android:right="10dp"
android:bottom="10dp"/
</shape
thumb_drawable.xml
<?xml version="1.0" encoding="utf-8"?
<selector xmlns:android="http://schemas.android.com/apk/res/android"
<item
android:state_pressed="true"
android:drawable="@drawable/thumb"/
<item
android:drawable="@drawable/thumb"/
</selector
thumb.xml
<?xml version="1.0" encoding="utf-8"?
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"
<corners
android:topLeftRadius="44dp"
android:topRightRadius="44dp"
android:bottomLeftRadius="44dp" /
<padding
android:paddingLeft="22dp"
android:paddingRight="22dp" /
<solid android:color="@color/colorPrimaryDark" /
</shape
效果如下:
以上就是本文的全部内容,希望对大家的学习有所帮助。
- OpenCV中KMeans算法介绍与应用
- LinkedIn 即时通信系统的优化
- javascript console输出图片?
- 快速搭建Storm集群环境
- OpenCV中BLOB特征提取与几何形状分类
- OpenCV实现照片自动红眼去除
- OpenCV3.1.0级联分类器训练与使用
- 图像处理之理解Homography matrix(单应性矩阵)
- OpenCV中图像直方图与应用
- OpenCV中图像修复技术介绍与演示
- 44个Java代码性能优化总结
- LDA(Linear Discriminant Analysis)算法介绍
- Express.js 4,Node.js,MongoDB REST API 简易教程
- 基于梯度下降算法求解线性回归
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- ctfshow-萌新赛
- VC++ libcurl FTP上传客户端程序
- Oracle RAC变更实验之修改11gR2+公网IP地址(网段不变)
- C# 纯控制台创建一个全屏窗口
- MySQL MHA部署添加Linux/Unix基本信息至Django中
- 记一次innobackupex导致的从库无法同步的问题
- mysqlbinlog命令详解记一次有函数的标量子查询导致的查询缓慢
- ctfshow红包题-web
- 微信支付一面(C++后台)
- 强网杯-随便注
- LeetCode 1547. Minimum Cost to Cut a Stick(动态规划)
- 管道符漏洞
- 06-STM32+ESP8266+AIR202远程升级方案-移植STM32+ESP8266实现利用http或https远程更新STM32程序到自己的项目(定时访问升级,备份升级)
- 反射
- 记一次sys 数据库的修复