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

写给初学者Jetpack Compose教程,Lazy Layout

嵌套滚动 嵌套滚动一直是我最不喜欢做事情,但是架不住就是有很多朋友会问。 RecyclerView是支持嵌套滚动,但我认为绝大部分情况下大家应该都用不到它。...首先第一种合理嵌套滚动,就是内层和外层列表滚动方向并不一致,这样它们之间是没有滑动事件冲突,因此合情合理。...由于嵌套滚动列表方向并不一致,因此这种情况是完全合法,运行效果如下: 再来看第二种合理嵌套滚动,即使内层和外层列表滚动方向一致,只要内层列表滚动方向上尺寸是固定,那么Compose对此仍然是支持...也就是说,如果是纵向嵌套滚动,那么内层列表高度必须是固定。如果是横向嵌套滚动,那么内层列表宽度必须是固定。...ConcatAdapter是用于将不同类型子项元素拼接到一起,让它们形成一个整体可滚动列表

32610

浅谈RecyclerView性能优化

RecyclerView回收原理 (1)如果是RecyclerView滚动情况下缓存(比如删除item)、重新布局时。...(2)如果是RecyclerView滚动情况下缓存(比如滑动列表),在滑动时填充布局。 先移除滑出屏幕item,第一级缓存mCachedViews优先缓存这些ViewHolder。...因为Scrap缓存池参与滚动回收复用,所以CacheView缓存池被称为一级缓存,又因为ViewCacheExtension缓存池是给开发者定义缓存池,一般不用到,所以RecycledViewPool...如果存在RecyclerView嵌套RecyclerView情况,可以考虑复用RecyclerViewPool缓存池,减少开销。...当RecyclerView元素比较高,一屏只能显示一个元素时候,第一次滑动到第二个元素会卡顿,这个时候就需要预留额外空间,让RecyclerView预加载可重用缓存。

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

recycleview优化_recyclerview原理

RecyclerView元素比较高,一屏只能显示一个元素时候,第一次滑动到第二个元素会卡顿。...RecyclerView (以及其他基于adapterview,比如ListView、GridView等)使用了缓存机制重用子 view(即系统只将屏幕可见范围之内元素保存在内存中,在滚动时候不断重用这些内存中已经存在...(false);//RecyclerView默认是setNestedScrollingEnabled(true),是支持嵌套滚动,也就是说当它嵌套在NestedScrollView中时,默认会随着NestedScrollView...2)每次打开界面都是定位在RecyclerView在屏幕顶端,列表上面的布局都被顶上去了 RecyclerView抢占了焦点,自动滚动导致....本站仅提供信息存储空间服务,拥有所有权,承担相关法律责任。如发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

3.7K20

初探富文本之基于虚拟滚动大型文档性能优化方案

具体来说,虚拟滚动只渲染用户浏览器口部分文档数据,而不是整个文档结构,其核心实现根据可见区域高度和容器滚动位置计算出需要渲染列表项,同时渲染额外图内容。...通常我们都仅会在主文档直属子元素即行元素上进行虚拟滚动,而对于嵌套结构例如行内存在代码块中表达出行内容则不会进行虚拟滚动,这样可以减少虚拟滚动复杂度,同时也可以保证渲染性能。...在Arco给予示例中我们可以看到其传递了height属性,此时如果我们将这个属性删除的话虚拟列表是无法正常启动,那么实际上Arco就是通过列表元素数量与每个元素高度,从而计算出了整个容器高度,...这里要注意滚动容器实际上应该是虚拟列表容器外元素,而对于口内区域则可以通过transform: translateY(Npx)来做实际偏移,当我们滚动时候,我们需要通过滚动实际滚动距离以及滚动容器高度...那么在这里我们需要关注一个问题,IntersectionObserver对象应用场景是观察目标元素交叉状态,而我们虚拟滚动核心概念是渲染非口区域元素

10910

自定义 Behavior,实现嵌套滑动、平滑切换周月视图日历

简介 先上个小米日历图,让大家知道要做一个什么效果: [strip] 这是小米日历效果,在用户操作列表时候,将日历折叠成周视图,扩大列表显示区域,同时也不影响日历部分功能使用,有趣且实用。...一种是通过建立依赖关系,一种是通过 RecyclerView 或 NextedScrollView 嵌套滑动机制,后面都会讲到。...为了降低复杂程度,我将所有折叠操作都放到 CalendarBehavior 里做,而 CalendarScrollBehavior 里面做一件事,就是把列表置于日历之下。...child.setBottom(child.getBottom() + calendarHeight); } } 这里没有用到 onDependentViewChanged 方法,所有联动操作都将通过嵌套滑动机制实现...列表滚动范围则是固定,最多向上移动 5 倍日历行高,也就是从 0 到 -calendarLineHeight 5。

3.1K10

Android 三级NestedScroll嵌套滚动实践

能够越级嵌套滚动正是它厉害之处。...三级嵌套滚动 一个常见嵌套滚动例子是 CoordinatorLayout/AppbarLayout – RecyclerView, 实现效果是向上滑动列表时,会先将 AppbarLayout 向上滑动直到完全折叠...对于这种两级嵌套滚动需求使用 CoordinatorLayout 几乎都能实现,如果遇到特殊业务需求基于 CoordinatorLayout 和 RecyclerView 实现改改也能实现。...可以发现这里除了 CoordinatorLayout/AppbarLayout – RecyclerView 这对嵌套滚动 Parent 和 Child 之外还多了搜索框和刷新动画,而这三者之间滑动逻辑需要通过嵌套滚动实现...,只是传统两级嵌套滚动不能满足,所以需要实现三级嵌套滚动

1.5K30

RecyclerView滑动时卡顿怎么办?

1.recyclerviewitem加载顺序 recyclerview 使用大家肯定陌生了,但是每个item加载顺序还是有必要了解一下,知道item显示出来流程。..., 对于列表来说,不管用RecyclerView 还是ListView,我们都会用ViewHolder来复用布局。...3.优化图片加载 我在别的文章中看到并且用在了自己软件中,图片加载优化是最有效办法,而且很多主流app中新浪微博,qq,今日头条等也在使用,因为列表滚动过程中,如果布局很复杂,样式也很多,那就需要考虑滚动时候不做复杂布局及图片加载...,尽量减少滚动过程中耗时操作,这样滚动停止时候再加载可见区域布局,因为这个时候是停止状态,即使略微耗时一些用户感知也是比较小,就会给人一种假象。...newState)中回调两个变量: recyclerView : 当前在滚动RecyclerView newState : 当前滚动状态.

3K20

2023年即将推出CSS特性对你影响大不大?

这与 :nth-child(2 of .special) 形成对比,后者将首先预过滤所有 .special 元素,然后从该列表中选择第二个。...作为开发人员,希望 100vh (口高度 100%)表示“与口一样高”,但该 vh 单元不考虑移动设备上缩回导航栏之类事情,因此有时它最终会太长并导致滚动。...支持 嵌套 Sass等框架嵌套功能,是最受css开发人员追捧功能之一,但是要想使用样式嵌套功能只能安装各种框架,现在Web平台也同样支持了嵌套功能,允许开发人员以更简洁分组格式编写,从而减少冗余...这意味着当您向上或向下滚动时,动画会向前或向后滑动。此外,对于滚动驱动动画,您还可以根据元素在其滚动容器中位置来控制动画。...这些函数现在在所有现代浏览器中都是稳定,并使您能够在Web平台上创建更有机布局。一个很好例子是这个径向菜单布局,现在可以使用sin()和cos()函数进行设计和动画。

16730

Recyclerview竟能如此丝滑,这14个优化策略不容错过...

引言 在Android开发中,RecyclerView是一种常用列表控件,用于展示大量数据。然而,随着数据量增加,RecyclerView性能可能会受到影响,导致卡顿、内存泄漏等问题。...优化思路 RecyclerView 性能优化核心思路可以概括为以下几个方面: 布局优化: 优化 RecyclerView 布局结构,减少嵌套层级,提高布局效率。...布局优化 减少布局嵌套 避免在RecyclerViewItem布局中使用过多嵌套布局和复杂层次结构,这会增加渲染时间和消耗。...如果Item高度固定或者会发生变化,应该避免使用该方法,否则可能导致布局显示异常。...(recyclerView, newState) // 判断滚动状态是否为停止滚动状态 if (newState == RecyclerView.SCROLL_STATE_IDLE

50610

Material Design 实战 之第四弹 —— 卡片布局

卡片式布局也是MaterialsDesign中提出一个新概念,它可以让页面中元素看起来就像在卡片中一样,并且还能拥有圆角和投影,下面我们就开始具体学习一下。...为充分利用屏幕空间,我们可以使用RecyclerView来填充MatenalTest项目的主界面部分。 这里参考一下郭神demo——实现水果列表,首先需要准备许多张水果图片: ?...,从而使得RecyclerView每个元素都是在卡片当中。...运行程序可见, 随着我们 向上滚动RecyclerView会Toolbar消失掉; 向下滚动RecyclerView,Toolbar又会重新出现; 滚动到Toolbar一半时松开手指,Toolbar...又会根据当前滚动距离情况,做出消失或者重新出现反应; 这其实也是MaterialDesign中一项重要设计思想,因为当用户在向上滚动RecyclerView时候,其注意力肯定是在RecyclerView

2K10

聊聊Android嵌套滑动

RecyclerView 为例: 嵌套滑动我们最先接触到可能就是 NestedScrollView 这个控件了,那么它是怎么支持嵌套滑动呢?...如果滑动时候拦截的话,手势事件会交给子view去处理,如果子view是可以滚动,这时候就会有冲突,所有滚动时候事件要拦截下来交给自己处理。...接着分发嵌套滚动事件,中间还有一些针对 Scroll mode处理,我们这里不关心: UP 时候会根据距离判断是否需要消费快速滑动,如果则会进行分发: 所以我们需要关注就是: startNestedScroll...嵌套滚动方案选择 有了这些接口之后,我们可以看到其实内置Android 控件都支持了滑动嵌套,那么是否我们平时使用方法都是正确呢?..., 最终表现就是,不管你列表有多少数据,都给你一次性加载出来。

1.2K10

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...float proportion = (float) (offset * 1.0 / (range - extent)); //计算滚动条宽度 float transMaxRange =...parentLayout.getWidth() - childline.getWidth(); //设置滚动条移动 childline.setTranslationX(transMaxRange

1.7K30

零基础入门 23: UGUI ScrollView

下图解释了勾选和勾选区别,实际就是Image是否显示控制 ?...下一步,我修改滚动视图到合适大小,调试大小时候大家可以把mask标记打开,方便调整,然后调试好了以后再关闭。 ? 然后我们来修改一下滚动图内父节点大小。...因为这个父节点要装下我们滚动列表内容,所以width宽度我选择和滚动视图一样,而增加这个内容节点高即Height值 ? 接下来是为我们滚动视图增加要滚动显示子项了。...最后在大家明白如何创建时候,来说下ScrollRect这个组件属性内容。 ? 内容很少,也非常简单。 Content:就是我们上面装载所有滚动内容父节点。...Rate:惯性减速系数 Scroll Sensitivity:滚动灵敏度 Viewport:口 Horizontal/Vertical ScrollBar:分别是水平和垂直滚动条 好了,掌握了今天内容

3K20

RecyclerView必知必会

Demo6: RecyclerView实现万能适配器,瀑布流布局,嵌套滑动机制。...但是RecyclerView出现会让很多开源项目被废弃,例如横向滚动ListView, 横向滚动GridView, 瀑布流控件,因为RecyclerView能够实现所有这些功能。...类,T是列表数据中每个元素类型,QuickAdapter.VH是QuickAdapterViewHolder实现类,称为万能ViewHolder。...那么如何在破坏原有Adapter实现情况下完成呢? 这里引入装饰器(Decorator)设计模式,该设计模式通过组合方式,在破话原有类代码情况下,对原有类功能进行扩展。...ArrayList[] mScrapViews;: 每个Item Type对应一个列表作为回收站,缓存由于滚动而消失View,此处View如果被复用,会以参数形式传给getView()

4.6K20
领券