Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >教你简单实现RecyclerView自动滚动

教你简单实现RecyclerView自动滚动

作者头像
程思扬
发布于 2023-07-25 07:50:48
发布于 2023-07-25 07:50:48
1.2K00
代码可运行
举报
文章被收录于专栏:程思阳的专栏程思阳的专栏
运行总次数:0
代码可运行

当RecyclerView内容过多,超出屏幕的时候,需要让它自己滚动展示数据,尤其是某些Android设备处于高处,或是不可被触摸点击的,这样的情况下,让其自己滚动展示数据尤为重要了 自动滚动的方案有很多种,目前比较常见又最简单的一种是:继承至RecyclerView,并实现runnable方法,每间隔10ms(delayTime)就去执行scrollby(x,y)方法,其中delayTime和x,y的值决定了滚动速度。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class AutoPollRecyclerView : RecyclerView {
    var autoPollTask //滚动线程
            : AutoPollTask? = null
    private var running //是否正在滚动
            = false
    private var canRun //是否可以自动滚动,根据数据是否超出屏幕来决定
            = false

    constructor(context: Context?) : super(context) {}
    constructor(context: Context?, @Nullable attrs: AttributeSet?) : super(context, attrs) {
        autoPollTask = AutoPollTask(this) //实例化滚动刷新线程
    }

    internal class AutoPollTask(reference: AutoPollRecyclerView?) : Runnable {
        private val mReference: WeakReference<AutoPollRecyclerView>
        override fun run() {
            val recyclerView: AutoPollRecyclerView = mReference.get() //获取recyclerview对象
            if (recyclerView != null && recyclerView.running && recyclerView.canRun) {
                recyclerView.scrollBy(2, 2) //注意scrollBy和scrollTo的区别
                //延迟发送
                recyclerView.postDelayed(recyclerView.autoPollTask, delayTime)
            }
        }

        //使用弱引用持有外部类引用 防止内存泄漏
        init {
            mReference = WeakReference<AutoPollRecyclerView>(reference)
        }
    }

    //开启:如果正在运行,先停止->再开启
    fun start() {
        if (running) stop()
        canRun = true
        running = true
        postDelayed(autoPollTask, delayTime)
    }

    fun stop() {
        running = false
        removeCallbacks(autoPollTask)
    }

    companion object {
        private const val delayTime: Long = 50 //间隔多少时间后执行滚动
    }
}

上面代码实现了最基本的滚动功能,但有时候Adnroid设备可以触摸的话,而当前recyclerview正在滚动,又去滑动它,那就会造成界面错乱,数据错乱了,所以还需要重写拦截onTouchEvent方法,当触摸到recyclerview的时候,即在ACTION_DOWN的时,停止滚动线程,在ACTION_UP、ACTION_CANCEL时再开启线程。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fun onTouchEvent(e: MotionEvent): Boolean {
    when (e.action) {
        MotionEvent.ACTION_DOWN -> if (running) stop()
        MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL, MotionEvent.ACTION_OUTSIDE -> if (canRun) start()
    }
    return super.onTouchEvent(e)
}

最后在设置itemCount的数量的时候不要返回集合的size,常见的返回Integer.MAX_VALUE,然后在获取数据的时候,用position和data.size()取余来获取实际的记录的索引值即可。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-07-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Android 【实现自动轮询的RecycleView】
需求:类似医院或者商场,大屏幕无限轮播item (广告词/广告图…) 代码如下 /** * Created by Xia_焱 on 2017/8/20. */ public class AutoPollRecyclerView extends RecyclerView { private static final long TIME_AUTO_POLL = 32; AutoPollTask autoPollTask; private boolean running; //标
全栈程序员站长
2021/04/07
5280
Android实现类似中奖信息自动滚动效果
最近需要实现抽奖功能,就需要把中奖的信息,以垂直循环滚动的形式向用户进行展示,这篇主要是使用RecyclerView实现垂直滚动效果,九宫格抽奖功能会在后期写,那现在就来看看实现的过程吧。
SoullessCoder
2019/08/07
3.6K0
Android实现类似中奖信息自动滚动效果
Android面试老生常谈的 View 事件分发机制,看这一篇就够了!
在 Android 开发当中,View 的事件分发机制是一块很重要的知识。不仅在开发当中经常需要用到,面试的时候也经常被问到。
程序员徐公
2021/06/01
6930
Android面试老生常谈的 View 事件分发机制,看这一篇就够了!
高级 UI 成长之路 (一) View的基础知识你必须知道
View 可以说是在日常开发中,天天使用的角色,虽然说 View 不属于四大组件,但是它的作用跟重要程度你真不可小视。该类型的文章打算写一个系列,对于自己复习或新手学习提供一个方式。
做个快乐的码农
2021/11/11
8440
高级 UI 成长之路 (一) View的基础知识你必须知道
高级 UI 成长之路 (二) 深入理解 Android 8.0 View 触摸事件分发机制
在上一篇文章中我们介绍了 View 的基础知识以及 View 滑动的实现,本篇将为大家带来 View 的一个核心知识点 事件分发机制。事件分发机制不仅仅是核心知识点也是 Android 中的一个难点,下面我们就从源码的角度来分析事件的传递还有最后是如何解决滑动冲突的。
做个快乐的码农
2021/11/12
7430
高级 UI 成长之路 (二) 深入理解 Android 8.0 View 触摸事件分发机制
Android自动轮播的三种方式
方法一:在runable里判断,不是最后条目的时候++,是的话=0,获取当前条目,给viewpager设置,然后在runable里递归post,在外面也post这个run // 自动轮播条显示 if (mHandler == null) { mHandler = new Handler() { public void handleMessage(android.os.Message msg) { int currentItem = mViewPager.getCurre
六月的雨
2018/05/14
1.1K0
dispatchTouchEvent事件分发浅析(一)大体代码
TouchEventUtil:(打印的帮助类,简单过滤MotionEvent的种类)
dodo_lihao
2018/09/12
5810
Android--事件分发机制(一)
在安卓中如果我们需要点击一个控件,并做处理的话,首先想到的就是setOnClickListener方法和setOnTouchListener方法,而在自定义控件中,需要自己处理触摸事件的话,我们需要改写onTouchEvent方法。这些方法的执行顺序和怎么被调用的,就是今天的研究课题 首先自定义一个控件,并改写onTouchEvent方法,打印日志 /** * 测试事件分发顺序 */ public class MyView extends View { public static final S
aruba
2020/07/03
6760
Android自定义系列——14.MotionEvent
MotionEvent在android的触摸事件中起到了很重要的作用,本文主要介绍MotionEvent,简要介绍触摸事件,主要包括 单点触控、多点触控、鼠标事件 以及 getAction() 和 getActionMasked() 的区别。
老马的编程之旅
2022/06/22
2.2K0
结合源码,重温 Android View 的事件处理知多少 ?
前言 Android View 的 事件处理在我们的编程中,可谓是无处不在了。但对于大多数人而言,一直都是简单的使用,对其原理缺乏深入地认识。 学 Android 有一段时间了,最近发现,很多基础知识开始有些遗忘了,所以从新复习了 View 的事件分发。特地整理成了这篇文章分享给大家。 本文不难,可以作为大家茶余饭后的休闲。 祝大家阅读愉快! 方便大家学习,我在 GitHub 上建立个 仓库 ---- 仓库内容与博客同步更新。由于我在 稀土掘金 简书 CSDN 博客园 等站点,都有新内容发布。所
圆号本昊
2021/09/24
3530
结合源码,重温 Android View 的事件处理知多少 ?
怎么简单实现菜单拖拽排序的功能
它是RecyclerView对于item交互处理的一个「辅助类」,主要用于拖拽以及滑动处理。
yechaoa
2022/09/19
1.4K0
AutoScrollTopBottomView
这个自定义控件是用来展示底层view的,当顶层的view滑动到底层view的中间时,顶层view会自动滚动到底层view的顶部或者底部,顶层view可以是scrollview,listview等. 希望对大家有帮助.
夏洛克的猫
2018/10/18
4680
AutoScrollTopBottomView
View,ViewGroup的Touch事件的分发机制
ViewGroup的事件分发机制 我们用手指去触摸Android手机屏幕,就会产生一个触摸事件,但是这个触摸事件在底层是怎么分发的呢?这个我还真不知道,这里涉及到操作硬件(手机屏幕)方面的知识,也就是Linux内核方面的知识,我也没有了解过这方面的东西,所以我们可能就往上层来分析分析,我们知道Android中负责与用户交互,与用户操作紧密相关的四大组件之一是Activity, 所以我们有理由相信Activity中存在分发事件的方法,这个方法就是dispatchTouchEvent(),我们先看其源码吧
xiangzhihong
2018/01/30
1.2K0
View,ViewGroup的Touch事件的分发机制
横向滑动视图HorizontalScrollView精炼详解
由于移动设备物理显示空间一般有限,不可能一次性的把所有要显示的内容都显示在屏幕上。所以各大平台一般会提供一些可滚动的视图来向用户展示数据。Android平台框架中为我们提供了诸如ListView、GirdView、ScrollView、RecyclerView等滚动视图控件,这几个视图控件也是我们平常使用最多的。本节内容我们来分析一下横向滚动视图HorizontalScrollView。
全栈程序员站长
2022/09/17
3.9K0
横向滑动视图HorizontalScrollView精炼详解
Android--RecyclerView嵌套RecyclerView优化
我们在使用RecyclerView嵌套RecyclerView时,会觉得卡顿,操作不是很顺畅 RecyclerView嵌套RecyclerView滑动.gif 在这个现象中,我们想要水平滑动时,却竖直
aruba
2020/07/02
1.8K0
Android Scroll分析
相对于Android2.x版本中常见的长按、点击操作,滑动的方式具有更友好的用户体验性。因此从4.x的版本开始,滑动操作大量出现在Android系统中。
小小工匠
2021/08/16
8290
相关推荐
Android 【实现自动轮询的RecycleView】
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验