首页
学习
活动
专区
圈层
工具
发布

MDC和Compose: 轮播图的两种实现

下面的代码展示了如何在 Activity 中初始化 RecyclerView 配置 CarouselSnapHelper 和 CarouselLayoutManager。...这意味着开发需要手动处理视图的更新,例如在 RecyclerView 中,手动调用 notifyDataSetChanged() 刷新界面。...3.3 布局和性能 在 MDC 中,我们使用 RecyclerView 配合 LayoutManager 实现复杂布局,这种方法虽然成熟,但可能需要手动优化滚动性能。...Jetpack Compose:内置性能优化 Compose 则通过惰性布局(如 LazyColumn、LazyRow)自动优化性能。它只会渲染屏幕上可见的内容,减少了不必要的计算。...对于那些依赖旧版框架或者不希望立即切换到新框架的开发者来说,MDC 是一个非常稳定的解决方案。 有任何问题欢迎提问,感谢大家阅读 )

2.2K81

Android 掉帧优化

当然我们也可以通过可视化界面查看UI性能,打开"开发者选项"中的"GPU渲染模式分析",即可在屏幕上看到每一帧绘制时间的直方图,某个值越大,代表该帧绘制的时间越长。...除了"GPU渲染模式分析",还有Android Studio中的CPU Profile用于查看APP运行时的方法调用栈,辅助开发人员定位热点方法并优化。...试想一个能在可视区域展示n(n>>5)条数据的RecyclerView(如历史记录),当滑动的时候RecyclerPool的缓存明显不够,会不断地创建ViewHolder,很消耗性能。...如果多个RecyclerView的内容性质相同,例如在信息流中,多个Fragment中的Item类型相同。...具体可见参考5,通过这个方法解决了ItemView更新时图片闪烁的问题。

2.2K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    recycleview的优化_recyclerview原理

    RecyclerView (以及其他基于adapter的view,比如ListView、GridView等)使用了缓存机制重用子 view(即系统只将屏幕可见范围之内的元素保存在内存中,在滚动的时候不断的重用这些内存中已经存在的...这个机制会导致一个问题,启动应用之后,在屏幕可见范围内,如果只有一张卡片可见,当滚动的时 候,RecyclerView找不到可以重用的view了,它将创建一个新的,因此在滑动到第二个feed的时候就会有一定的延时...,如果项目中复用RecycledViewPool时,开启该功能会更好的实现复用。...什么时候LayoutManager会从RecyclerView上分离呢,有两种情况:1)重新setLayoutManager()时,比如淘宝页面查看商品列表,可以线性查看,也可以表格形式查看,2)还有一种是...本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    5.4K21

    RecyclerView 居然还能实现吸底效果

    一般不推荐这种方式去实现,不过它可以当做一个保底方案,毕竟简单粗暴易理解易实现。...这个类中的实现其实是简化了Gavin-ZYX/StickyDecoration项目中的实现。...分组悬停实现方式二:onDrawOver中获取Item中的可见View,从中获取分组头部View进行复用 这种方法,将需要悬停的部分也绘制到Item中,Adapter中的Item是一个组的所有元素,Item...我们在onDrawOver中获取到第一个可见子View,然后根据id从里面获取到头部View,接着将这个用canvas将这个View绘制出来即可。 有兴趣的同学可以自行实现。...github项目地址:https://github.com/tinyvampirepudge/Android_Base_Demo RecyclerView相关的demo打开方式如下: ?

    3.5K20

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

    京东首页 可见,在向上滑动页面时,当tabLayout滑动到顶部时,外层RecyclerView停止滑动,此时tabLayout即为吸顶状态,接着会 滑动ViewPager中的内层RecyclerView...按分析的view结构直接实现 可见,在tabLayout是吸顶状态,无法继续滑动内层RecyclerView(抬起手指继续滑也不行)。(点击查看相关代码) 那么该咋办呢?...NestedScrollView嵌套RecyclerView 参考这篇实名反对《阿里巴巴Android开发手册》中NestedScrollView嵌套RecyclerView的用法。...(点击查看NestedScrollingParent2LayoutImpl2的实现) 效果如下,可见滑动流畅,临界处不用抬起手指重新滑,且查看日志不是一次加载完item。 ?...:此时还获取不到ViewPager内fragment的RecyclerView,需要在加载ViewPager后 fragment可见时 传入 } private RecyclerView

    4.4K31

    记一次全民K歌的crash定位过程

    ChildHelper中因动画需要未与RecyclerView分离的ItemView 进行查找并返回(ChildHelper主要是接管了RecyclerView对子View的处理,解决动画过程中,子View...,于是准备把它从RecyclerView中remove并改放到RecycledViewPool中,然后就crash了。...作品刚发布时,不可见的那个页面对此无感知,会出现RecyclerView是Refresh、Header、Footer、Empty、Load五个item的状态,而Adapter的数据集中在Header与Footer...异常 可能有人会感兴趣增删数据并调用了notifyXXXRemoved的正常情况下,RecyclerView是如何在preLayout及postLayout阶段都能通过position获取到正确的ViewHolder...,没有考虑到Fragment恢复的情况,导致在正常的Fragment下多生成了一个不可见的Fragment,之后发布了作品并对其执行了会引起数据变化的互动操作,使其layout到布局中,刷新列表后不可见的

    2.7K30

    原生长列表内嵌 Flutter 卡片性能调研

    FlutterCard 卡片对象是不断被 RecyclerView 循环使用的; 长列表包含了 200 张卡片,在实际的运行中 RecyclerView 创建了约 9 个 FlutterCard 对象...PlatformViewAndroid::NotifyDestroyed 主要工作: 通知 Flutter.ui 线程停止 Animator; 通知 Flutter.raster 线程的光栅化器释放资源,如...卡片空白帧数 在 Demo 的场景中,RecyclerView 在惯性滚动时,将新的卡片从不可见区域移进可见区域,触发了 TextureView 的绘制,而 TextureView 的 Surface...如果仅仅只是两帧的空白,考虑到卡片本身只是一部分可见,设置卡片的 Flutter Widget 背景色跟原生 View 保持一致,或者干脆 Flutter Widget 不绘制背景,完全透明(需要使用...内存占用通过 meminfo 查看,主要看 PSS,PSS 虽然不能完全代表真实的物理内存占用,不过用于对比增量还是有一定参考价值的。

    1.8K20

    RecyclerView 自定义ItemDecoration从入门到实现吸顶效果

    ,粘贴到项目直接用。...但是这个并不是获取RecyclerView所有的item个数,而是当前屏幕可见的item个数。...因为上面说了item和内容和onDraw中画的内容在同一图层,当然会被出现重合的情况.这个时候getItemOffsets就能派上用场了.只要在原来的item的加个偏移值(效果和在Adpater中为item...接着来实现实现: 当前屏幕可见的第一个item的BottomRecyclerView向上滑动直到滑出屏幕,代码如下: ?...的底部相互接触到后继续滑动的话第一个item就会慢慢向上滑动,直到第一个item完全画出屏幕,固定分割线立马回到最开始的位置和item2分割线重叠了在一起,现在可以把paint2换回paint效果会更直观,不上效果图了

    1.7K10

    关于RecyclerView你知道的不知道的都在这了(上)前言目录正文

    而且,它还建议我们,如果我们项目里有复用 RecyclerViewPool 的话,那么开启这个功能会是一个很好的辅助,它可以将这些 item 回收起来给其他 RecyclerView 用。...瀑布流.png 瀑布流的样式在手机应用上比较常见,尤其图片查看相关的应用,在 Tv 应用上这种瀑布流布局就比较少见了。...日志.png 得到的结果是个数组,数组的大小就是构造方法中传入的 spanCount。 简单点说,上面四个方法的作用,是以每行或每列为单位来寻找相对应的首个(末个)可见或完全可见的 item。...,也许它并不是处于当前屏的最顶部或最底部,就像上图日志中的 position=7 的 item,它虽然是最后完全可见的 item,但并不是位于最底部,最底部是 6 的 item。...那么,在该方法回调时,这些信息还没被重置掉,官方建议我们可以在这里释放一些耗内存资源的工作,如 bitmap 的释放。

    3.6K60

    Android | Tangram动态页面之路(一)需求背景

    需求背景 首先,笔者在工作中(生产环境)使用的并非Tangram,而是公司内部的框架(未开源),不过原理都大同小异,本系列文章也不会精细到每一行源码,不求齐全,只求用尽可能小的篇幅讲明白。...也就是说,需要足够灵活的页面模板,满足不同时间,不同人群(如多人多面)展示不同结构的页面。当然这点h5也能做到,但是h5体验要差于native,一般用于临时活动页或高度灵活的页面。...功能查看view树,可见图中的39和43两个小模块都是RecyclerView的直接子view,有着平级关系, ?...这就是用RecyclerView实现异构和扁平化的基本概念,vlayout通过自定义LayoutManager进行了实现。关于异构和扁平,更详细的分析可见参考文章。...参考文章 苹果核 - RecyclerView 里的自定义 LayoutManager 的一种设计与实现

    1.2K40

    深入浅出 RecyclerView

    不过 RecyclerView 的 ViewHolder 创建稍微有些限制,类名就是上面继承的时候泛型中声明的类名(或者应该说,上面泛型中的类名需要是这个holder的类名);并且 ViewHolder...使用 demo 可以查看:Github 【RecyclerView默认动画】 LayoutManager的常用方法 findFirstVisibleItemPosition() 返回当前第一个可见 Item...adapter封装 其实很早之前写过一篇关于 RecyclerView 适配器的封装,所以这不再赘述了,传送门:RecyclerView的通用适配器 使用 demo 可以查看:Github 【RecyclerView...:Github 【自定义 Divider 使用】 五虎上将工作原理 借用 Google IO 视频中的一张截图: 视频的完整地址可查看: RecyclerView ins and outs - Google...RecyclerView 的内部维护了一个二级缓存,滑出界面的 ViewHolder 会暂时放到 cache 结构中,而从 cache 结构中移除的 ViewHolder,则会放到一个叫做RecycledViewPool

    2K60

    ViewPager2实现内部Item的动态滚动

    当然RecyclerView也可以,用一个仿抖音的那种 LayoutManager 就行,但是为什么不呢,因为涉及到了视频播放,手动去处理一些生命周期和懒加载,总是非常麻烦,而且ViewPager2本身就是基于...比如不可见,页面加载,总体相对来说并不是那么容易。 就在我以为又可以摸鱼一个ViewPager2就可以搞定之时。突然,产品同学发了新指示,下意识预感不妙。...好家伙,不按套路出牌啊,我故作深沉,实则稳如老狗( ViewPager2 不是有一个 fakeDragBy() 方法设置偏移量吗),这个有点麻烦,我得考虑考虑。...接下来不却知道自己要开启了啪啪打脸时刻,满心欢喜,太easy啊,ViewPager2 真香! 打脸时刻 于是熟练的开分支,切分支,写demo,调用方法,走起! 先看一下这个方法。...既然有这个方法,那不就很简单吗,伪代码如下: 查看效果如下: 示例 我裂开了,为什么会这样,我就属性动画里调了一下而已,去看一下源码。

    2K20

    Android ListView 与 RecyclerView 对比浅析:缓存机制

    PS:相关知识: ListView与RecyclerView缓存机制原理大致相似,如下图所示: 滑动过程中,离屏的ItemView即被回收至缓存,入屏的ItemView则会优先从缓存中获取,只是ListView...(这只是缓存使用的其中一个场景,还有如刷新等) PPS:本文不贴出详细代码,结合源码食用更佳! 二. 正文 2.1 缓存机制对比 1....功能相似,意义在于快速重用屏幕上可见的列表项ItemView,而不需要重新createView和bindView; 2). mScrapView和mCachedViews + mReyclerViewPool...共同使用,在特定场景下,如viewpaper+多个列表页下有优势.客观来说,RecyclerView在特定场景下对ListView的缓存机制做了补强和完善。...ListView中通过pos获取的是view,即pos-->view; RecyclerView中通过pos获取的是viewholder,即pos --> (view,viewHolder,flag);

    7.2K41

    自定义无限循环的LayoutManager

    概述 在日常开发的过程中,同学们都遇到过需要RecyclerView无限循环的需求,但是在官方提供的几种LayoutManager中并未支持无限循环。...众所周知,RecyclerView中含有四类缓存,在布局过程中它们各自有各自的用途: AttachedScrap: 存放可见、不需要重新绑定的ViewHolder CachedViews: 存放不可见、...,通过在RecyclerView中添加子View,并对子View进行测量与布局,直至子View超出RecyclerView的可布局宽度。...当左滑后子View被左移动时,RecyclerView的右侧会出现可见的未填充区域,这时需要在RecyclerView右侧添加并布局好新的子View,直到没有可见的未填充区域为止。 ?...在RecyclerView中,需要在滑动、填充可见区域的同时,对不可见区域的子View进行回收,这样才能体现出RecyclerView的优势。 回收的方向与填充的方向恰好相反。

    3.1K20

    手把手教你用RecyclerView实现猫眼电影选择效果

    在最近的一个电影票平台项目中,使用RecyclerView实现了仿猫眼的电影选择控件,如下图所示: 以上图为例,我们的需求如下: 每一次滑动都让图片保持在中间。...中,我们如果需要滑动到某一位置,一般会使用RecyclerView.smoothScrollToPosition(idx)方法,但是在此处我们在设置item的点击事件时,不能直接使用这个方法,因为这个方法只会将...recyclerview滑动到idx位置的item可见便停止了,而无法移动到中间。...,RecyclerView.smoothScrollToPosition(idx)调用了LinearLayoutManager.smoothScrollToPosition方法,代码中的calculateDtToFit...方法控制滑动的位置,其中参数中view为需要滑动可见的item,box为整个布局。

    1.4K00

    Android ListView 与 RecyclerView 对比浅析--缓存机制

    PS:相关知识: ListView与RecyclerView缓存机制原理大致相似,如下图所示: 过程中,离屏的ItemView即被回收至缓存,入屏的ItemView则会优先从缓存中获取,只是ListView...(这只是缓存使用的其中一个场景,还有如刷新等) PPS:本文不贴出详细代码,结合源码食用更佳! 二. 正文 2.1 缓存机制对比 1....功能相似,意义在于快速重用屏幕上可见的列表项ItemView,而不需要重新createView和bindView; 2). mScrapView和mCachedViews + mReyclerViewPool...共同使用,在特定场景下,如viewpaper+多个列表页下有优势.客观来说,RecyclerView在特定场景下对ListView的缓存机制做了补强和完善。...ListView中通过pos获取的是view,即pos→view; RecyclerView中通过pos获取的是viewholder,即pos → (view,viewHolder,flag); 从流程图中可以看出

    2K20
    领券