首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

AsyncListDiffer-RecyclerView最好的伙伴

导读,近些年来 Android 一直在优化 RecyclerView 刷新效率,相继出了 DiffUtil,AsyncListDiffer ,我在我的开源库 Flap 中也支持了 AsyncListDiffer...Override public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) { // areItemsTheSame...返回true,我们还需要判断两个item的内容是否相同 // 此处以User的age作为两个item内容是否相同的依据 // 即返回两个user的age是否相同...,还早着呢,咱们理智分析一下: 首先DiffUtil.calculateDiff()这个方法是执行在主线程的,如果新旧数据List比较大,那么这个方法铁定是会阻塞主线程的 计算出DiffResult...// 如果新旧数据相同,则啥事不做 return; } // 用于控制计算线程,防止在上一次submitList未完成

1.6K10

嵌套滑动通用解决方案--NestedScrollingParent2

京东首页 可见,在向上滑动页面tabLayout滑动到顶部,外层RecyclerView停止滑动,此时tabLayout即为吸顶状态,接着会 滑动ViewPager中的内层RecyclerView...所以按照正常处理滑动冲突的思路处理--tab没到顶部,parent拦截事件,tab到顶部 parent就不拦截事件,但是由于手指没抬起来,所以这一事件序列还是继续给parent,不会到内部RecyclerView...作者最后建议使用RecyclerView多布局。 但其实在真实应用中,可能 头部 和 列表 的数据来自不同的接口,列表的数据请求失败要展示缺省图,但头部还是会展示。...,的处理 * * @param lastItemTop tab屏幕顶部的距离,是0就代表到顶了 * @param dy 目标滑动距离, dy>0 代表向上滑...,的处理 * * @param lastItemTop tab屏幕顶部的距离,是0就代表到顶了 * @param dy * @param consumed

3.6K31
您找到你想要的搜索结果了吗?
是的
没有找到

ViewPager2实现内部Item的动态滚动

我们这是一个视频播放页+详情页,考虑简单快捷,就想到了一个 ViewPager2 就可以实现,简单又快捷,为自己点赞。一想到如此easy,瞬时笑出了猪叫。...当然RecyclerView也可以,用一个仿抖音的那种 LayoutManager 就行,但是为什么呢,因为涉及到了视频播放,手动去处理一些生命周期和懒加载,总是非常麻烦,而且ViewPager2本身就是基于...解决方法 既然如此,ViewPager2是基于RecyclerView,那么我去调用RecyclerView滚动不就行吗,思路如下: ViewPager2-> RecyclerView, RecyclerView...默认是私有的,可以通过反射或者 getChildAt(0) 获取 RecyclerView不支持 scrollTo() ,可以通过 LinearLayouManager 去滚动 LinearLayoutManager-scrollToPositionWithOffset...需要注意的点 就如我上面最开始分析所述,如果详情页是可滑动的,那么就必须处理一下滑动冲突,相应的方式也很简单,使用内部拦截法,让滑动的View优先获得事件即可,处于滑动View顶部,再将事件还给父

1.6K20

CoordinatorLayout与滚动的处理

假设你定义了一个最小高度(minHeight)同时enterAlways也定义了,那么view将在到达这个最小高度的时候开始显示,并且从这个时候开始慢慢展开,滚动顶部的时候展开完。 ?...exitUntilCollapsed: 同样顾名思义,这个flag定义何时退出,当你定义了一个minHeight,这个view将在滚动到达这个最小高度的时候消失。...记住,要把带有scroll flag的view放在前面,这样收回的view才能让正常退出,而固定的view继续留在顶部。 此时,你应该注意到我们的Toolbar能够响应滚动事件了。 ?...滚动发生的时候,CoordinatorLayout会尝试触发那些声明了依赖的子view。...这个behavior用于滚动发生的时候让AppBarLayout发生改变。

73820

手把手教你打造RecyclerView滚动特效

Item动画分析 我们化整为零,将这个效果分解一个item上来看其实是这样的: ?...可见范围顶部的距离。...RecyclerView初始情况 我们可以将RecyclerView初始情况设想如上图,此时turningLine的值为0。RecyclerView滑动: ?...总高度(包含不可见部分)与RecyclerView可见部分的高度相差得到;而scrollY则随着RecyclerView滚动变化,因此需要对RecyclerView进行滚动事件的监听: recyclerView.addOnScrollListener...RecyclerView滑动太快,单位滚动距离内,滚动监听事件的触发频率较低,导致有些Item的动画进度未达到100%便从屏幕中消失,从而存在重新滚动到那个Item,Item的动画停留在1%~99%

2.5K10

项目需求讨论- 自定义滚轮(第二波新实现)

而且如果你手指快速的滑动,不停的滚动,你就会滑到顶部的位置。因为我们的是ScrollView 最后选中哪一项,才让它滚动到中间相应的那一项。 那有些人可能会说,那我就不只弄这几组。...break; } }复制代码 state变为了RecyclerView.SCROLL_STATE_IDLE就说明了RecyclerView已经停止了。...3.比如只划一部分,如何让它自动滚到相应的Item(重点) 方法还是一样,通过当前获取到的滚到的Y值,然后除以每项的Item的高度,就能知道当前顶部是处于第几项,然后求余数就知道了当前顶部那项有多少是显示的...---- 滚动后调整距离让RecyclerView 滚到特定的position位置: 我简单介绍,就只分二种情况来谈下(正好滑到一个标准的距离,让Item正好完全显示这种情况我就去除了): 顶部的Item...但是结果是不会滚动,原来这个方法当我们的Position + 1已经出现在屏幕上了。不管是不是第一个,不管处于屏幕的哪个位置,这个RecyclerView就不会滚动。我忍不住又一句 WHF!!。

1.1K20

Android ScrollView粘性头部代码分享

前言,一天在点外卖的时候,注意饿了么列表页的滑动效果不错,但是觉得其中的手势滑动还是挺复杂的,正好又碰到了在熟悉Touch事件的理解当中,所以就抽空对着饿了么的列表页面尝试写写这个效果 1.先贴一个实现的效果图...逻辑是外部的ScrollView没有滑到底部的时候,往上滑动的时候,是滑动外部的ScrollView,外部的ScrollView到达底部的时候,我们再网上滑,就是滑动内部的列表了,另外在左右滑动的时候...5.0.0.3版本修复有底部有操作栏的时候,界面的滚动出现错乱的问题。...6.2.既然我们知道了怎么让view的touch事件,接下来我们就要明白在什么情况下我们应该让父view执行滚动事件,什么时候让子view执行滚动事件。...ScrollView 底部不在顶部向下子ScrollView 底部顶部向下父ScrollView 底部顶部向上子ScrollView 在这里父ScrollView不在底部的时候,不会出现子ScrollView

1.4K20

CoordinatorLayout使用全解析

enterAlwaysCollapsed:假设你定义了一个最小高度(minHeight)同时enterAlways也定义了,那么view将在到达这个最小高度的时候开始显示,并且从这个时候开始慢慢展开,滚动顶部的时候展开完...exitUntilCollapsed:当你定义了一个minHeight,此布局将在滚动到达这个最小高度的时候折叠。 snap:一个滚动事件结束,如果视图是部分可见的,那么它将被滚动到收缩或展开。...pin:CollapsingToolbarLayout折叠后,此布局将固定在顶部。 parallax:CollapsingToolbarLayout折叠,此布局也会有视差折叠效果。...CollapsingToolbarLayout的子布局设置了parallax模式,我们还可以通过app:layout_collapseParallaxMultiplier设置视差滚动因子,值为:0~...假设你定义了一个最小高度(minHeight)同时enterAlways也定义了,那么view将在到达这个最小高度的时候开始显示,并且从这个时候开始慢慢展开,滚动顶部的时候展开完。

2K20

淘宝首页Bug!嵌套滑动及NestedScroll

所以 按照正常处理滑动冲突的思路处理----tab没到顶部,parent拦截事件,tab到顶部 parent就不拦截事件,但是由于手指没抬起来,所以这一事件序列还是继续给parent,不会到内部RecyclerView...、开始滑动内部RecyclerView,都询问NestedScrollLayout2是否处理且如何处理。...相对的, 向下滑动内部RecyclerView,如果还能滑就滑内部RecyclerView;如果已经滑到顶部就让parent去滑动外部RecyclerView。...其中mRootList是外部RecyclerView,mChildList是内部RecyclerView,childTop是tab这个view的top 用于判断是否到顶部。...scrollListener是监听tab到顶部后设置其背景色用的。主要关注调用scrollBy滚动的是哪个列表,滚动了多少。

1.5K20

Android 三级NestedScroll嵌套滚动实践

这样做的好处是 Child 检测到一个 fling ,它可以选择将这个 fling 引起的 scroll 一部分作用在 Parent 上一部分作用在自己身上,而不是只作用在 Parent 或者 Child...所以通过 NestedScrolling(Parent2/Child2) 实现嵌套滚动,当你触发了一个 fling ,也可以做很顺滑连贯的交替滚动,而 1 就很难达到相同的效果。...三级嵌套滚动 一个常见的嵌套滚动例子是 CoordinatorLayout/AppbarLayout – RecyclerView, 实现的效果是向上滑动列表,会先将 AppbarLayout 向上滑动直到完全折叠...向下滑动列表在展开 AppbarLayout 之前先展开搜索框。 列表没滑动到顶部可以通过触发一定速度的向下 fling 来展开搜索框。...可以发现这里除了 CoordinatorLayout/AppbarLayout – RecyclerView 这对嵌套滚动的 Parent 和 Child 之外还多了搜索框和刷新动画,而这三者之间的滑动逻辑需要通过嵌套滚动实现

1.6K30

聊聊Android嵌套滑动

聊聊Android嵌套滑动 最近工作中遇到了需求是使用 Bottom-Sheet 交互的弹窗,使用了 design 包里面的 CoordinatorLayout 和 BottomSheetBehavior...如果是其他手势,滑动的时候拦截,滑动的时候拦截。如果滑动的时候拦截的话,手势事件会交给子view去处理,如果子view是可以滚动的,这时候就会有冲突,所有滚动的时候事件要拦截下来交给自己处理。...接着分发嵌套滚动事件,中间还有一些针对 Scroll mode的处理,我们这里不关心: UP 的时候会根据距离判断是否需要消费快速滑动,如果则会进行分发: 所以我们需要关注的就是: startNestedScroll...不全是,最常见的比如 NestedScrollView 包裹 RecyclerView ,这时候 NestedScrollView 会把 UNSPECIFIED 传递给 RecyclerView 的 onMeasure...总结 这里,Android的嵌套滑动机制就介绍完了。

1.3K10

【Android从零单排系列二十六】《Android视图控件——ScrollView》

布局超过屏幕大小时,ScrollView会自动启用滚动功能,用户可以通过滑动屏幕来查看隐藏部分的内容。...与RecyclerView相比,ScrollView更适用于静态的、不需要复用子项的情况。...为了让ScrollView正常工作,内容视图的高度应根据其内容进行适当调整。您可以通过设置高度为"wrap_content"或固定高度,或使用权重来控制内容视图的高度。...android:fadeScrollbars:控制滚动条是否在活动状态渐隐。设置为true表示滚动条会渐隐,默认为false。...fullScroll(int direction):使ScrollView滚动到指定的边界,参数direction可以是View.FOCUS_UP(滚动顶部)或View.FOCUS_DOWN(滚动到底部

36420

Android仿微信朋友圈点击评论自动定位相关行功能

打开你的微信朋友圈,点击评论,你就会发现有一个小细节:文本输入框的高度恰好定位这条信息的底部位置 ?...列表的滚动 输入框也有了,这时候就差滚动了。我们可以通过smoothScrollBy来让RecyclerView按X或者Y轴进行滚动。那我们这里到底应该滚动多少距离才对呢?,咱们来计算一下吧 ?...图中红色部分为键盘展现之前某条信息评论区所在位置;蓝色部分为键盘,键盘打开的时候,我们需要将红色的部分移动到黄色的位置。...这样黄色顶部与红色顶部中间的区域高度,就是RecyclerView需要滚动的数值这样就好办了,我们使用getLocationOnScreen去获取差值,再加上评论区域高度就行了 fun showInputComment...针对第一个问题,我们直接添加一个空View作为列表最后一项即可,并且高度要等于输入框的高度;第二个问题也很简单,就是监听键盘弹出与隐藏View高度发生的变化 data class BottomClass

1.5K60

真滴牛逼,轻松实现RecyclerView 拖动多选功能

答案是肯定的,今天就为大家介绍一个牛逼的库,drag-select-recyclerview,可以轻松实现recyclerView 拖动多选。...DragSelectTouchListener 是这个库的核心类,该库将会处理拖动事件拦截和自动滚动逻辑,拖动到recyclerView 顶部的时候,列表将继续滚动,反之亦然。...使用的时候,将DragSelectTouchListener attache RecyclerView,它将会处理触摸事件的拦截,然后通过一个receiver 来返回结果和更新UI。...结合RecyclerView使用如下: val recyclerView: RecyclerView = // ... val receiver: DragSelectReceiver = // ......true, 0 is the initial selected index touchListener.setIsActive(true, 0) 通过设置setIsActive ,当用户长按列表Item

2K00
领券