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

Android开发笔记(一百七十二)第二代翻页视图ViewPager2

正如RecyclerView横空出世取代ListView和GridView那样,Android也推出了二代翻页视图ViewPager2,打算替换原来的翻页视图ViewPager。...notifyItem***方法,从而动态刷新某项视图; 3、除了当前页,也支持展示左右两页的部分区域; 4、支持在翻页过程中展示自定义的切换动画; 虽然ViewPager2增加了这么棒的功能,但它用起来非常简单...,掌握下面几个方法就够了: setAdapter:设置二代翻页视图的页面适配器。...先在测试页面的Java代码中补充下面几行:     // ViewPager2支持展示左右两页的部分区域     RecyclerView cv_content = (RecyclerView) vp2...原先ViewPager采用的翻页适配器叫做FragmentStatePagerAdapter,而ViewPager2采用了FragmentStateAdapter,两个适配器的名称差了个“Pager”。

3.1K31

ViewPager2:官方Viewpager升级版来临

简单解析 通过查看源码得知,ViewPager2是直接继承ViewGroup的,意味着和ViewPager不兼容,类注释上也写了它的作用是取代ViewPager,不过短时间内ViewPager应该还不会被废弃掉...ViewPager2也能很容易地支持这两种滚动方向了,而几乎不需要添加任何多余的代码。...其实在此之前也不乏有大神采用RecyclerView来实现轮播图效果的,具体实现发生略有不同,但大体思想是一致的。这次ViewPager2的推出意味着这种方法终于被扶正了。...PagerSnapHelper的作用让滑动结束时使当前Item居中显示,并且 限制一次只能滑动一页,不能快速滑动,这样就和viewpager的交互很像了。...不过目前viewpager2只是第一个预览版,还存在稳定性方面的问题,不建议大家引入到正式项目中来,尝尝鲜就好。

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

    【ViewPager2避坑系列】瞬间暴增数个Fragment

    ,理论上每个ItemView一定会是MATCH_PARENT,控制一屏只加载一个Item,但是一旦MATCH_PARENT计算失效,那么ViewPager2基本上就是RecyclerView的效果,瞬间多个...,所以关注的重点转移到RecyclerView.onMeasure()上,RecyclerView对子View的计算和布局逻辑在LayoutManager中,所以本例子重要看LinearLayoutManager...measureHorizontal()方法中通过判断lp.width == 0 && lp.weight > 0断定是否需要过渡加载useExcessSpace,下面的过渡加载就是采用UNSPECIFIED...FrameLayout会测量所有可见View的尺寸,然后算出最大的尺寸maxWidth和maxHeight,自身尺寸的测量调用setMeasuredDimension()方法,每个Dimension的设置调用...=UNSPECIFIED,结果返回传入的size,在FrameLayout中是maxWidth和maxHeight,而并不是parent给予的specSize; 4.3 为何整体会测量两遍 这是由于FrameLayout

    8.1K30

    Now in Android | 12 月刊 · 2019

    的进展与新功能》和《Fragment 的过去、现在和将来》等。...Android 10 针对非 SDK 接口 (限制非公开 API 的使用) 做出的更改影响了一些方法,而这些方法影响到了 Transition 代码库的映射。...△ Jetpack Compose 使用教程中的示例代码 Jetpack Compose 在十月底的 Android Dev Summit 上公布,不过它并不属于典型的 alpha/beta/发布候选/...这套课程涵盖了 Android 开发过程中的各种进阶问题,包括通知、定制视图、动画、映射、测试,以及使用 Firebase UI 登录等等。 Codelabs ?...这一系列的 Codelabs 安排与教学课程类似,相比较全部由讲师主导课程,我们希望可以让开发者们自行决定学习进度,并在这个基础上与视频教学内容配合学习。

    2.4K30

    JavaScript框架--迈向2023年

    我并不确信每个人都在同一页面上,但是该领域的许多领先思想实际上对某件事情有共识。这不是一件可以轻视的事情。 我们所处的位置 单页应用程序并不是最适合一切的架构。...在初始加载之后,根据导航渲染下一页。即使是 Qwik,它本来可以作为优化的部分加载应用程序启动,并且可以扩展到完整的 SPA,但它在所有示例和演示中都更喜欢服务器路由(MPA)。...你不能在短时间内在一个领域倾注大量创新,而不希望出现什么问题。...Edge :未曾探索的边界 在过去的 12 个月中,几乎所有元框架都支持了边缘函数。在这一点上,绝大多数元框架都可以部署到各种服务器less 和边缘产品中。但是,这并没有改变我们的开发方式。...不。但它可能帮助你将代码从一个框架迁移到另一个框架。 总结 过去大约 5 年相对沉寂之后,在过去一年左右出现了新的框架。这不是我们停止制作它们的原因,而是时机已经成熟了。

    1.7K10

    安卓软件开发:Java和Kotlin实现首页壁纸的手势切换功能

    这功能提升了应用的互动性,增强了用户对应用的操作感。 二、项目开发 2.1 添加项目依赖项 引入UI库以及Glide库,用于加载壁纸资源。...UI 同步:保证手势切换和UI更新是同步,防止出现手势滑动后壁纸没有即时切换的情况。 边界处理:在壁纸数组到达边界时的回环处理逻辑需要确保不会出现数组越界错误。...它通过监听用户在屏幕上的触摸事件,根据手势类型调用相应的回调方法。...内置功能 自动管理页面加载和销毁,支持页面预加载 提供多种手势检测(点击、滑动、长按等) 适用场景 标签页切换、图片浏览等 壁纸切换、手势导航、图片浏览等 方向支持 水平滑动(ViewPager),...水平和垂直滑动(ViewPager2) 任意方向手势检测 复杂难度 简单,封装好 灵活,需要手动管理手势逻辑 性能 内部预加载和销毁机制 需要实现手势优化 得到结论:ViewPager 和 GestureDetector

    1.2K151

    2025 史上最全十万字Android面试总结

    举例:Animal(动物)可以是一个抽象类,它定义了所有动物共有的属性(如 name)和行为(如 sleep() 的默认实现),以及必须由子类具体实现的抽象行为(如 makeSound())。...作用:存放编译期生成的各种字面量(如字符串 "Hello")和符号引用(如类和接口的全限定名、字段和方法的名称及描述符)。在 JDK 8 之后,字符串常量池被移到了堆中。...定义:为了保持与早期 Java 版本的二进制兼容性,Java 编译器在编译泛型代码时,会将所有的泛型类型参数信息擦除,替换为其限定类型(通常是 Object)或第一个边界。...5.常用控件 ViewPager2 与 ViewPager ViewPager 和 ViewPager2 是 Android 中用于实现页面滑动(左右或上下)功能的核心组件,常用于引导页、图片轮播、标签页切换等场景...核心原因:线程不安全与UI框架设计 Android 的 UI 框架采用单线程模型,所有界面操作(如视图绘制、布局计算、事件分发)必须在主线程(UI 线程)中执行。

    79310

    Android MVVM框架搭建(四)RecyclerVIew + ViewPager2 + BaseQuickAdapter

    正文   在上一篇文章中,我讲述了怎么使用Room和MMKV去管理本地数据,本文将是不一样的介绍方式,因为会和页面打交道比较多,所以会比上一篇更有意思,起码我是这么觉得的。...,这里我有删除、增加、查询所有数据的方法。...,如下图所示: 这里我修改了@Database注解中的内容,增加了新的表和版本升级到2,同时在构建数据库的时候增加一个迁移,最后增加wallPaperDao抽象方法,方便使用的地方直接去调用。...,因为我不希望保留之前的老数据,所以先删除所有数据,再添加新数据。...: 这里就是通过传递过来的url地址和查询到的url进行比对,得到具体的位置,然后显示这个vp的当前位置item,这里有一个false,为什么是false,因为不需要显示动画效果,如果不设置为false

    3.2K10

    自定义无限循环ViewPager(三)――ViewPager方法改造实现无限循环

    在改造之前,我们先想想为什么当ViewPager滑动到第一页的时候,再向右滑动的时候,ViewPager无法滑动了?...同理,当ViewPager滑动到最后一页的时候,再向左滑动的时候,ViewPager也无法滑动了?...在第一篇文章中,有分析过ViewPager的populate()的方法,我们知道此方法主要作用是更新缓存列表以及计算缓存页面的偏移量。...此方法中,在针对创建几个缓存页面的时候,存在着限制,这便是导致ViewPager在滑动到第一页和最后一页时,无法再滑动的原因。...的值进行边界判断限制,但这两个值在calculatePageOffsets()进行了最小和最大值的赋值更改,所以根据页面的偏移和滑动距离得到的最终滑动距离不会造成边界超出,因而此方式所涉及的方法不需要改造

    4.3K51

    Android MVVM框架搭建(四)RecyclerVIew + ViewPager2 + BaseQuickAdapter

    正文   在上一篇文章中,我讲述了怎么使用Room和MMKV去管理本地数据,本文将是不一样的介绍方式,因为会和页面打交道比较多,所以会比上一篇更有意思,起码我是这么觉得的。...,这里我有删除、增加、查询所有数据的方法。...,如下图所示: 这里我修改了@Database注解中的内容,增加了新的表和版本升级到2,同时在构建数据库的时候增加一个迁移,最后增加wallPaperDao抽象方法,方便使用的地方直接去调用。...,因为我不希望保留之前的老数据,所以先删除所有数据,再添加新数据。...: 这里就是通过传递过来的url地址和查询到的url进行比对,得到具体的位置,然后显示这个vp的当前位置item,这里有一个false,为什么是false,因为不需要显示动画效果,如果不设置为false

    2.6K20

    Android深入卡顿分析与实践

    与音视频生命周期,解耦运行,随着业务的增多,所有创建服务和派发生命周期集中在一个消息中运行,造成卡顿严重。...时机:由于预加载类会造成内存占用,那么如果一进入主页就针对所有用户加载的话,可能对那些从来没有加入歌房的用户造成内存紧张,因此,这里针对“时间”和“空间”做一个平衡。...,进房平均耗时大盘数据减少250ms 2.4.懒加载优化 在1中复杂任务拆解时,很容易发生单个任务耗时稍微严重,多个不耗时任务累加就会造成卡顿非常严重,因此针对单个任务中稍微耗时的任务进行懒加载,直到使用时才加载...因此可以进一步优化,确认无线程安全问题时使用by lazy(LazyThreadSafetyMode.NONE).如: 2.必须在主线程中执行的,延迟到下一个消息执行 2.5.布局层级与按需加载优化...针对内存紧张时进房间,内容易内存触顶,GC频繁,造成卡顿 分析:直播间内使用的ViewPager2作为上下滑动的框架,因此如果能进入当前Item时,不预加载下一个直播,这样就可以避免一个房间对象实例的创建

    2.6K11

    怎样在Android上实现一个iOS多任务列表效果

    ,滚动过程中,ViewPager会回调transformPage(View page, float position),在这里面做想要的变化就行,PageTransformer具体的使用方法这里不细讲,...需要注意的是,setPageTransformer方法的第一个参数(reverseDrawingOrder)需要是true,因为我们的效果是后面的item被叠在前面item的后面,而ViewPager默认的实现是后面的...这个方法主要做的事情是找出移除item的所有后续item,如果存在后续item,则调animateRestView触发补齐动画,这个方法这里不详细讲,需要关注的是,获取后续item需要通过mDrawingOrderedChildren...因为ViewPager可以先往后滑,再往前滑,这时候前面的item可能是刚创建出来的,addView的时候肯定就存在child数组的最后面,但事实上这个view是显示在屏幕的最前面),而mDrawingOrderedChildren...)是从左边开始的,要实现成从右边开始,理论上可以实现,即把ViewPager所有和X坐标相关的操作都给他反过来就是了,目测需要改动的地方不少,先不折腾了,实现了的同学可以分享下哈。

    4.3K60

    MVVM框架下实现分页功能

    思考逻辑拆分 1.页面初次加载出数据的时候,需要对视图层和分页功能做初始化,如果第一次加载的数据不足10条,证明没有后续页面,所以也就不用显示分页功能,如果等于10条则证明有下一页。 ?...初始化只有1页 2.考虑页面列表显示几个:此处设定为5个,且这个列表要随着点击上一页,下一页而动态更新 ?...同时用了2个方法来进行操作,changPage这个方法用来改变当前页面的视图层显示数据,arrowPage 方法用了进行上一页和下一页的操作,方法相同,参数不同。...即这种情况 c.点击上一页和下一页操作 ? 操作方法 根据arrowDirection的值来判断是进行上一页还是下一页的操作。...请求数据变更数据 2.上一页的操作 因为“上一页“数据均属于已经存在的状态,所以不涉及请求,只会设计变更列表和页面数据。开头的思路中已经说明 d.点击类别页面的方法changePage ?

    1.4K20

    VFP在运行时扩展报表系统,这是报表转换任意格式的秘决

    Report listener 基础 Report listener 以两种途径来生成输出:“一次一页”模式,每次生成一页然后输出该页、再生成下一页然后再输出这一页、如此等等一直到做完报表。...在“一次所有页”模式中,Report listener 会绘制所有的页并将它们放在内存的缓存中,然后它根据需要输出这些绘制好了的页,比如当用户在打印预览窗口中单击了 next 按钮。...将对象的高度改变为使得对象要分开多页才能完整显示这种事情是不支持的;如果你改变了一个对象的高度以至于当前页上放不下这个对象了,那么这个对象将整个被放到下一页上去。...MaxHeightAvailable和Reattempt属性能帮助你判定当前页上还余留着多少空间、和对象是否会被推到下一页上去。...,则该对象已经被推到下一页上去了,因为当前页上放不下它。只读。 Reload L 将这个值设置为.T.以通知报表引擎,告诉它你已经改动了一个或者多个其它属性。

    1.6K21

    Fragment 的过去、现在和将来

    Fragment 的诞生与发展 不知道您是否还记得 "上古时期",在那些还没有 Fragment 的日子,几乎所有逻辑都被放在了 Activity 中,使得 Activity 臃肿而又混乱。...而我们想要实现的则是一种同时支持单一回退栈和多重回退栈的模型,好让屏幕上不可见的 Fragment 也能保存自己的状态,从而避免状态的丢失。与此相关的使用场景,比较典型的就是底部导航一类的导航视图。...下面是一个我们的示例应用。我们想要做的事情就是让应用中每个底部标签页都拥有自己的栈,这样它们就能保存各自的状态。而当您在这些标签页间切换时,我们也将帮您处理好从一个栈到另一个栈时状态的保存和恢复。...而诸如 FragmentFactory 和状态保存一类,以往在 onConfigrationChange、 进程的死亡和恢复时使用的方法,在这种情况下将会成为默认选项。...最后还介绍了几个我们仍在开发中的功能: 多重回退栈 使 Fragment 以及其他导航组件间可以优雅的通讯 简化 Fragment 的生命周期 希望这些内容可以帮助您更好地使用和理解 Fragment

    1.1K10

    Android Compose开发

    在布局中同步嵌入 onClick 等事件处理 如需要还可以嵌入 if ,for 这样的控制语句 减少 findViewById 等函数遍历树 加速开发:View 与 Compose 之间可以相互调用,兼容现有的所有代码...可组合函数是一种特殊的函数,不需要返回任何 UI 元素,因为可组合函数描述的是所需的屏幕状态,而不是构造界面 widget;而如果按我们以前的 XML 编程方式,必须在方法中返回 UI 元素才能使用它(...它控制了视图在屏幕上的显示顺序。具有较高 zIndex 值的视图将显示在具有较低 zIndex 值的视图之上。 默认情况下,视图的 zIndex 值为0。...PagingConfig 对象用于配置分页的行为和属性,其中包括: pageSize:每一页的数据大小。 initialLoadSize:初始加载的数据大小。...prefetchDistance:在达到列表末尾之前开始预取下一页的距离。 pagingSourceFactory 函数用于创建一个实现 PagingSource 接口的数据源。

    1.6K10
    领券