首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Android无限循环RecyclerView的完美实现方案

背景 项目中要实现横向列表的无限循环滚动,自然而然想到了RecyclerView,但我们常用的RecyclerView是不支持无限循环滚动的,所以就需要一些办法让它能够无限循环。...4.对RecyclerView进行滚动和回收itemView处理 对RecyclerView的子item进行排版布局,运行一下效果就会出现了,不过这时候我们滑动列表会发现滑动变成空白了,所以就该对滑动操作进行处理了...首先分为两部分,往左填充或是往右填充,dx为将要滑动的距离,如果 dx 0,则是往左边滑动,则需要判断右边的边界,如果最后一个itemView完全显示出来右边填充一个新的itemView。...fill方法计算出来的,通常情况下都为 dx,只有当滑动到最后一个itemView,并且循环滚动开关没有打开的时候才为0,也就是不滚动了。...只有对不可见的itemView进行回收,才能做到回收利用,防止内存爆增。

4.6K20

Android RecyclerView 滚动到中间位置的方法示例

最近看到QQ音乐的歌词每次滑动都可以滚回到中间位置。觉得甚是神奇,打开开发者模式显示布局,发现歌词部分不是采用 android 控件的写的,应该是前端写的。...于是,我想,能不能用 recyclerView 实现这个自动回滚到中间位置呢。 功夫不负有心人,查找了一些资料之后,终于搞定了。 下面由我细细讲来。...目标 点击某个条目,经过4s无任何操作之后,该条目滚动到中间位置显示。点击,用户滑动,等用户不操作再开始延时。用户多次点击,记最后一次点击位置。...分析 首先先考虑,滚动到指定位置是如何操作的?...// scrollBy(x, y)这个方法是自己去控制移动的距离,单位是像素,所以使用scrollBy(x, y)需要自己去计算移动的高度或宽度。

2.8K30

Android实现类似中奖信息自动滚动效果

最近需要实现抽奖功能,就需要把中奖的信息,以垂直循环滚动的形式向用户进行展示,这篇主要是使用RecyclerView实现垂直滚动效果,九宫格抽奖功能会在后期写,那现在就来看看实现的过程吧。...实现步骤: 1.效果图展示 2.自定义实现滚动效果RecyclerView 3.适配器Adapter实现 4.适配器布局文件 5.主程序调用过程 6.主布局文件 7.总结 实现过程: 1....效果图展示 [8r7ks3zf9c.gif] 在这里插入图片描述 2.自定义实现滚动效果RecyclerView public class AutoPollRecyclerView extends RecyclerView...start(); break; } //return false,注释掉onTouchEvent()方法里面的stop和start方法,则列表自动滚动且不可触摸...需要Demo源码的童鞋可以底部公众号回复:"自动滚动效果" 即可获取---- --- 小编整理了一份Android电子书籍,需要的童鞋关注公众号回复:"e_books" 即可获取哦!

3.4K30

Android:让你明明白白的使用RecyclerView——SnapHelper详解

简介 RecyclerView24.2.0版本中新增了SnapHelper这个辅助类,用于辅助RecyclerView滚动结束时将Item对齐到某个位置。...这个方法计算targetPosition的时候把布局方式和布局方向都考虑进去了。...这几个方法计算位置的时候用的是OrientationHelper这个工具类,它是LayoutManager用于测量child的一个辅助类,可以根据Layoutmanager的布局方式和布局方向来计算得到...横向布局方式,内容从右往左滚动为正;竖向布局方式,内容从下往上滚动为正 // 滚动距离/item的长度=滚动item的个数,这里取计算结果的整数部分 if (distance >...可以看到该效果是一个类似Gallery的横向列表滑动控件,很明显可以用RecyclerView来实现,而滚动的ItemView是对齐RecyclerView的左边缘位置,这种对齐效果当仍不让就使用了SnapHelper

5.4K40

Android自定义控件进阶:自定义LayoutManager

注意:因为item随着滑动会有不同的缩放,所以实际normalViewGap会被缩放计算。...LayoutManager中,流程上也是差不多的,我们需要重写onLayoutChildren方法,这个方法会在初始化或者Adapter数据集更新时回调,在这方法里面,需要做以下事情: 进行布局之前,...没错,就是布局了,我们也是根据需求来决定使用layoutDecorated还是layoutDecoratedWithMargins方法; 自定义ViewGroup中,layout完就可以运行看效果了,...自动选中 1、滚动停止自动选中 监听 onScrollStateChanged,滚动停止时计算出应当停留的 position,再计算出停留时的 mHorizontalOffset 值,播放属性动画将当前...: //当列表滚动停止,判断一下自动选中是否打开 if (isAutoSelect) { //找到离目标落点最近的

2K00

recycleview的优化_recyclerview原理

,但是第二个feed之 滚动是流畅的,因为这个时候RecyclerView已经有能重用的view了。...具体实现方式是: RecyclerView 开始一个滚动时new Runnable对象,根据 layout manager 和滚动的方向预取即将进入视野的条目,可以同时取出一个或多个条目,例如在使用...,滑动暂停再加载;RecyclerView中存在几种绘制复杂,占用内存高的楼层类型,但是用户只是快速滑动到底部,并没有必要绘制计算这几种复杂类型,所以也可以考虑对滑动速度,滑动状态进行判断,满足条件再加载这几种复杂的...7.2 复用RecycledViewPool TabLayout+ViewPager+RecyclerView的场景中,当多个RecyclerView有相同的item布局结构时,多个RecyclerView...2)每次打开界面都是定位在RecyclerView屏幕顶端,列表上面的布局都被顶上去了 RecyclerView抢占了焦点,自动滚动导致的.

3.7K20

Android开发笔记(一百三十五)应用栏布局AppBarLayout

库(主页面的RecyclerView需要); 2、布局文件的根布局采用android.support.design.widget.CoordinatorLayout,因为design库的动态效果都依赖于该控件...RecyclerView是其中一个特工,它可用来替代ListView和GridView;替代ScrollView的则另有其人,它便是嵌套滚动视图NestedScrollView,Android5.0之后的...所以,搜遍Android的SDK源码,总共也只有三个控件符合这个条件,它们是RecyclerView、NestedScrollView,以及SwipeRefreshLayout,布局文件中使用的名称如下所示...比如说是先滚还是滚,是滚一半还是全部滚,是自动滚还是手动滚等等。...3、大家都知道ViewPager是左右滚动的翻页视图,用户通过手势把页面横向拉动一段距离松开,系统会判断接下来是自动左滚还是自动右滚,总之最后用户看到的是一个完整的页面,而不是拉到一半的页面。

1.8K40

恢复 RecyclerView滚动位置

您可能在开发过程中遇到过这种情况, Activity/Fragment 被重新创建RecyclerView 丢失了它之前保有的滚动位置信息。...通常这种情况发生的原因是由于异步加载 Adapter 数据,且数据 RecyclerView 需要进行布局的时候尚未加载完成,导致 RecyclerView 无法恢复到之前的滚动位置。...从  1.2.0-alpha02 版本开始,Jetpack RecyclerView 提供了一个新的 API,可以让 Adapter  在数据加载完成之前阻塞布局行为 ,从而避免丢失滚动位置信息。...接下来我们会介绍如何使用这个新的 API,以及它的工作原理。 恢复至原有滚动位置 有好几种方法可以用来恢复 RecyclerView 至正确的滚动位置,您可能已经实际项目中用到了这些方法。...其中最好的一种方法是将数据提前缓存在内存、ViewModel 或 Repository 中,然后确保第一次布局传入之前,将缓存的数据设置到 Adapter 中去。

1.4K10

RecyclerView必知必会

但是RecyclerView的出现会让很多开源项目被废弃,例如横向滚动的ListView, 横向滚动的GridView, 瀑布流控件,因为RecyclerView能够实现所有这些功能。...Googlesample中给了一个参考的实现类:DividerItemDecoration,这里我们通过分析这个例子来看如何自定义Item Decoration。...RecyclerView继承了ViewGroup,并重写了measureChild(),该方法onMeasure()中被调用,用来计算每个child的大小,计算每个child大小的时候就需要加上getItemOffsets...为了简化,我们将remove,move,change动画执行过程省略,只看执行add动画的过程,如下: 为了防止执行add动画时外面有新的add动画添加到mPendingAdditions中,从而导致执行...表示退出折叠。

4.6K20

ItemTouchHelper 实现交互动画

onMove方法中处理拖拽的回调逻辑,那么什么时候被调用?当Item被拖拽排序移动到另一个Item的位置的时候被调用。onSwiped方法当Item被滑动删除到不见中处理被删除的逻辑。...04.拖拽效果上优化 拖拽效果优化 item被拖拽或侧滑时修改背景色,当动作结束将背景色恢复回来,而ItemTouchHelper.Callback中正好有对应这两个状态的方法,分别是:onSelectedChanged...11.RecyclerView上拉加载 添加recyclerView的滑动事件,上拉加载分页数据,设置上拉加载的底部footer布局,显示和隐藏footer布局 12.RecyclerView缓存原理...也就是通过计算对齐RecyclerView中TargetView 的指定点或者容器中的任何像素点。...控件滑动到顶部和底部 02.RecyclerView嵌套RecyclerView 条目自动上滚的Bug 03.ScrollView嵌套RecyclerView滑动冲突 04.ViewPager嵌套水平RecyclerView

3.8K20

一个Demo学会用Android兼容包新控件

##布局文件 源码中学习Android,是有种身临其境的感觉的。 学习Android解释再多代码都没有用,因为解释过了还是不会用。...因此,我们这里将布局文件XML源码贴出来供学习,放心,所有知识点都已经注释源码中。...-- 你的主界面内容,必须放置Drawerlayout中的第一个位置 根据自己的需要来放置控件, 例如:LinearLayout布局或者RelativeLayout布局;...本例中,TabLayout界面滚动时,随着Toolbar的逐渐隐藏,将占据Toolbar的位置, 达到节省屏幕空间,界面动画效果的目的。...app:cardPreventCornerOverlap : v20和之前的版本中添加内边距, 这个属性是为了防止卡片内容和边角的重叠

1.5K40

实现 RecyclerView 上拉加载及自动加载

之前《一步步打造自己的通用上拉加载布局》(如果没有看过,建议先看下这一篇)写到如何实现一个通用的上拉加载布局,本文将基于此进行扩展,实现 RecyclerView 的上拉加载及自动加载。...之前《一步步打造自己的通用上拉加载布局》(如果没有看过,建议先看看这一篇)写到如何实现一个通用的上拉加载布局,本文将基于此进行扩展,实现 RecyclerView 的上拉加载及自动加载。...准备工作 由于中已经把上拉的逻辑都封装好,因此这里主要是对的及自动加载的封装。...实现自动加载 接下来实现自动加载,这个也很简单,思路就是监听的滚动,如果到达底部,则主动触发上拉加载。...接下来 Java 代码中添加配置: 然后设置触发了上拉加载的处理: 最后看运行结果: 项目地址:https://github.com/msdx/hi-loadmore

1.4K90

RecyclerView 必知必会

但是RecyclerView的出现会让很多开源项目被废弃,例如横向滚动的ListView, 横向滚动的GridView, 瀑布流控件,因为RecyclerView能够实现所有这些功能。...Googlesample中给了一个参考的实现类:DividerItemDecoration,这里我们通过分析这个例子来看如何自定义Item Decoration。...RecyclerView继承了ViewGroup,并重写了measureChild(),该方法onMeasure()中被调用,用来计算每个child的大小,计算每个child大小的时候就需要加上getItemOffsets...为了防止执行add动画时外面有新的add动画添加到mPendingAdditions中,从而导致执行add动画错乱,这里将mPendingAdditions的内容移动到局部变量additions中,然后遍历...表示退出折叠。

4.1K90

教你简单实现RecyclerView自动滚动

RecyclerView内容过多,超出屏幕的时候,需要让它自己滚动展示数据,尤其是某些Android设备处于高处,或是不可被触摸点击的,这样的情况下,让其自己滚动展示数据尤为重要了 自动滚动的方案有很多种...= null private var running //是否正在滚动 = false private var canRun //是否可以自动滚动,根据数据是否超出屏幕来决定..., delayTime) } } //使用弱引用持有外部类引用 防止内存泄漏 init { mReference...(autoPollTask) } companion object { private const val delayTime: Long = 50 //间隔多少时间执行滚动...方法,当触摸到recyclerview的时候,即在ACTION_DOWN的时,停止滚动线程,ACTION_UP、ACTION_CANCEL时再开启线程。

68440

浅谈RecyclerView的性能优化

RecyclerView的性能优化 相信大家平时开发的过程中都会遇到RecyclerView卡顿的情况,那么如何才能够让RecyclerView变得更加丝滑呢?...RecyclerView的回收原理 (1)如果是RecyclerView滚动情况下缓存(比如删除item)、重新布局时。...(2)如果是RecyclerView滚动情况下缓存(比如滑动列表),滑动时填充布局。 先移除滑出屏幕的item,第一级缓存mCachedViews优先缓存这些ViewHolder。...这里我以DiffUtil举例说明该如何使用。...当程序走到onBindViewHolder方法时,数据应当是准备完备的,禁止onBindViewHolder方法里面进行数据获取的操作。 3.有大量图片时,滚动时停止加载图片,停止再去加载图片。

1.7K10

Android recyclerView横条指示器实现淘宝菜单模块

电商首页菜单模块,可以横向滑动,底部的滑动位置指示器该如何实现呢? ?...实现思路: 1.上方横滑列表可以直接使用RecyclerView实现; 2.下方的指示器: (1).计算RecyclerView划出屏幕的距离w1和剩余宽度w2的比例y,y = w1 / (总宽度w3...– 可使视区域宽度w4); (2).计算出指示器该移动的距离w5= y * (指示器的总宽度w6- 滑块宽度w7); (3).指示器布局实现: <RelativeLayout android:id..., int dy) { super.onScrolled(recyclerView, dx, dy); //整体的总宽度,注意是整体,包括显示区域之外的 //滚动条表示的总范围 int...rcvClassifyTypes.computeHorizontalScrollExtent(); //滑出部分在剩余范围的比例 float proportion = (float) (offset * 1.0 / (range - extent)); //计算滚动条宽度

1.7K30

RecyclerView滑动时卡顿怎么办?

1.尽量减少布局嵌套,层级越深,每次测量时间久越久。 2. 如果布局很复杂,可以考虑自定义布局能不能实现。 3.尽量减少过度绘制区域。这个可以开发者选项中看到:调试GPU过度绘制。...3.优化图片加载 我别的文章中看到并且用在了自己的软件中,图片加载的优化是最有效的办法,而且很多主流的app中新浪微博,qq,今日头条等也使用,因为列表滚动过程中,如果布局很复杂,样式也很多,那就需要考虑滚动的时候不做复杂布局及图片的加载...如果有不熟悉 onScrollStateChanged 方法的朋友可以看一下下面的介绍 void onScrollStateChanged(RecyclerView recyclerView, int...newState)中回调两个变量: recyclerView : 当前滚动RecyclerView newState : 当前滚动状态....static final int SCROLL_STATE_DRAGGING = 1; //自动滚动开始 public static final int SCROLL_STATE_SETTLING =

3K20
领券