90%人都理解错了的ViewPager的onPageScrolled方法

Android ViewPager2 核心原理与工业级实践教程 ViewPager2 是 Android 中用于实现页面级滑动容器的关键组件,其本质是一个轻量级页面调度器,而非简单的滑动视图。它通过 offscreenPageLimit 控制预加载范围、FragmentStateAdapter 管理生命周期复用、viewLifecycleOwner 实现精准懒加载,构建起页面状态持久化与性能平衡的技术闭环。相比传统 RecyclerView 嵌套或手动 GestureDetector 方案,ViewPager2 提供了标准化的页面生命周期解耦、TabLayout 联动支 阅读详情

2.onPageScrolled(int position,float positionOffset, int positionOffsetPixels):这个方法会在屏幕滚动过程中不断被调用。
            有三个参数,第一个position,这个参数要特别注意一下。当用手指滑动时,如果手指按在页面上不动,position和当前页面index是一致的;如果手指向左拖动(相应页面向右翻动),这时候position大部分时间和当前页面是一致的,只有翻页成功的情况下最后一次调用才会变为目标页面;如果手指向右拖动(相应页面向左翻动),这时候position大部分时间和目标页面是一致的,只有翻页不成功的情况下最后一次调用才会变为原页面。
              当直接设置setCurrentItem翻页时,如果是相邻的情况(比如现在是第二个页面,跳到第一或者第三个页面),如果页面向右翻动,大部分时间是和当前页面是一致的,只有最后才变成目标页面;如果向左翻动,position和目标页面是一致的。这和用手指拖动页面翻动是基本一致的。
               如果不是相邻的情况,比如我从第一个页面跳到第三个页面,position先是0,然后逐步变成1,然后逐步变成2;我从第三个页面跳到第一个页面,position先是1,然后逐步变成0,并没有出现为2的情况。
               positionOffset是当前页面滑动比例,如果页面向右翻动,这个值不断变大,最后在趋近1的情况后突变为0。如果页面向左翻动,这个值不断变小,最后变为0。
positionOffsetPixels是当前页面滑动像素,变化情况和positionOffset一致。




http://www.eoeandroid.com/forum.php?mod=viewthread&tid=548173

 

ViewPage使用时,最关键的代码就是setOnPageChangeListener,传入一个ViewPager.SimpleOnPageChangeListener对象。ViewPager.SimpleOnPageChangeListener是个接口,有三个方法,下面做介绍。
注:ViewPager有两个操作,一个是用手指滑动翻页,一个是直接setCurrentItem(一般用于点击上面的tab直接setCurrentItem)。下面的方法介绍也会针对这两种情况分别介绍。
最后还会讨论这三个方法相对执行顺序的问题。


1.onPageSelected(int position):这个方法有一个参数position,代表哪个页面被选中。当用手指滑动翻页的时候,如果翻动成功了(滑动的距离够长),手指抬起来就会立即执行这个方法,position就是当前滑动到的页面。如果直接setCurrentItem翻页,那position就和setCurrentItem的参数一致,这种情况在onPageScrolled执行方法前就会立即执行。



2.onPageScrolled(int position,float positionOffset, int positionOffsetPixels):这个方法会在屏幕滚动过程中不断被调用。
有三个参数,第一个position,这个参数要特别注意一下。当用手指滑动时,如果手指按在页面上不动,position和当前页面index是一致的;如果手指向左拖动(相应页面向右翻动),这时候position大部分时间和当前页面是一致的,只有翻页成功的情况下最后一次调用才会变为目标页面;如果手指向右拖动(相应页面向左翻动),这时候position大部分时间和目标页面是一致的,只有翻页不成功的情况下最后一次调用才会变为原页面。
当直接设置setCurrentItem翻页时,如果是相邻的情况(比如现在是第二个页面,跳到第一或者第三个页面),如果页面向右翻动,大部分时间是和当前页面是一致的,只有最后才变成目标页面;如果向左翻动,position和目标页面是一致的。这和用手指拖动页面翻动是基本一致的。
如果不是相邻的情况,比如我从第一个页面跳到第三个页面,position先是0,然后逐步变成1,然后逐步变成2;我从第三个页面跳到第一个页面,position先是1,然后逐步变成0,并没有出现为2的情况。
positionOffset是当前页面滑动比例,如果页面向右翻动,这个值不断变大,最后在趋近1的情况后突变为0。如果页面向左翻动,这个值不断变小,最后变为0。
positionOffsetPixels是当前页面滑动像素,变化情况和positionOffset一致。


3.onPageScrollStateChanged(int state):这个方法在手指操作屏幕的时候发生变化。有三个值:0(END),1(PRESS) , 2(UP) 。
当用手指滑动翻页时,手指按下去的时候会触发这个方法,state值为1,手指抬起时,如果发生了滑动(即使很小),这个值会变为2,然后最后变为0 。总共执行这个方法三次。一种特殊情况是手指按下去以后一点滑动也没有发生,这个时候只会调用这个方法两次,state值分别是1,0 。
当setCurrentItem翻页时,会执行这个方法两次,state值分别为2 , 0 。


三个方法的执行顺序为:用手指拖动翻页时,最先执行一遍onPageScrollStateChanged(1),然后不断执行onPageScrolled,放手指的时候,直接立即执行一次onPageScrollStateChanged(2),然后立即执行一次onPageSelected,然后再不断执行onPageScrollStateChanged,最后执行一次onPageScrollStateChanged(0)。
其它的情况由这个可以推出来,不再赘述。

Android CardView+ViewPager实现ViewPager翻页动画的方法 Viewpager通俗一点讲就是一个允许左右翻转带数据的页面的布局管理器,经常用来连接Fragment,它很方便管理每个页面的生命周期,使用ViewPager管理Fragment是标准的适配器实现。最常用的实现一般有FragmentPagerAdapter和FragmentStatePagerAdapter。自行百度它的用法。今天我们要实现的是下面的效果: NO PICTURE TALK A JB 要实现图中的效果需要以下几个知识点: 1.clipChildren属性 2.一个页面显示多个ViewPager的Item 3.自定义PagerTransformer 4.ViewPager结合C 立即下载

相关推荐

RK3588多路MIPI摄像头采集与WiFi低延迟传输实战指南

本文详细介绍了基于RK3588平台实现多路MIPI摄像头同步采集并通过WiFi进行低延迟传输的完整实战方案。文章深入剖析了从V4L2驱动配置、多线程采集、环形缓冲区设计到UDP网络传输优化的核心技术,旨在帮助开发者在工业检测、智能安防等场景下构建高并发、高实时性的视频流系统,实现端到端延迟控制在100毫秒以内的目标。

tensor9flow的博客 788

ViewPager的滑动监听

监听ViewPager的滑动,需要实现3个方法: onPageScrolled(int i, float v, int i1) onPageSelected(int i) onPageScrollStateChanged(int i) 1.onPageScrolled(int i, float v, int i1): 每次点击ViewPagerItem时和滑动ViewPager都会调用,且调用多次...

sunyFS的博客 2959

从Xilinx FPGA到MIPI DSI LCD屏:手撸代码的实战经验分享

本文分享了使用Xilinx FPGA驱动MIPI DSI LCD屏的实战经验。作者从依赖官方IP核失败,到与底层D-PHY IP缠斗,最终通过手撸代码,直接配置GTY收发器原语并实现完整的D-PHY与DSI协议栈,成功点亮屏幕。文章详细剖析了协议细节、Vivado工具链的调试技巧与避坑指南,为FPGA工程师提供了从理论到实践的宝贵参考。

weixin_29188997的博客 400

android onpagescrolled 参数,Android

8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?背景ViewPager 在应用中使用较为广泛,诸如页面轮播图,App引导页,大图预览等。其中指示器页比较重要它用于提示用户当前的页面状态,使得应用更具交互性。PagerTitleStripPagerTitleStrip 内置的指示器,布局作为ViewPager的一个子View,需要设置android:layout_gra...

weixin_30125497的博客 667

Seedance2.5本地部署指南:从环境配置到生产优化的完整实践

在 AI 内容生成领域,本地部署方案正逐渐成为开发者和技术团队关注的焦点。Seedance2.5 作为一款支持图像和视频生成的 AI 工具,其完全离线运行的能力解决了云端服务在数据隐私、使用成本和访问稳定性方面的痛点。对于需要处理敏感内容、频繁生成素材或希望完全掌控生成流程的技术人员来说,掌握本地部署方法具有实际价值。 本文将以 Seedance2.5 的本地部署为例,详细介绍从环境准备、依赖配置到运行验证的完整流程,同时深入分析关键参数配置、常见问题排查方法以及生产环境下的优化建议。通过实际部署过程,理解

weixin_33139275的博客 732

TB6600驱动器共阴共阳接法傻傻分不清?一张图搞定STM32与42步进电机的接线避坑指南

本文详细解析了TB6600驱动器共阴共阳接法的本质区别,提供了STM32与42步进电机的高效连接方案。通过实际案例和接线图示,帮助读者避免常见错误,确保驱动器与MCU的安全连接,提升项目稳定性。

weixin_28710999的博客 246

OnPageChangeListener-->>onPageScrolled

public void onPageScrolled(int arg0, float arg1, int arg2)   当页面在滑动的时候会调用此方法,在滑动被停止之前,此方法回一直得到调用。其中三个参数的含义分别为: arg0 :当前页面,及你点击滑动的页面 arg1:当前页面偏移的百分比 arg2:当前页面偏移的像素位置      ...

乱七八糟 2678

Python 爬虫实战:全球渔业船舶捕捞记录数据采集与分析全攻略

通过本项目,我们实现了对全球渔业船舶捕捞记录数据的采集、处理和可视化,为渔业资源管理和海洋生态保护提供了数据支持。未来,可以进一步结合机器学习和深度学习技术,对捕捞行为进行预测和分类,提高对非法捕捞活动的识别能力。

2201_76125261的博客 557

Android双层ViewPager2与TabLayout联动实战指南

ViewPager2是Android Jetpack中用于同级页面滑动切换的核心组件,其设计本质是状态驱动的页面容器,需配合FragmentStateAdapter和TabLayout实现语义化导航。理解ViewPager2的预加载机制、生命周期绑定及onPageSelected回调时机,是解决顶部Tab与底部Tab双向联动问题的关键。技术价值在于避免Fragment重复创建、内存泄漏与状态不一致,适用于电商、政务、教育类App中常见的多层级导航场景。本文聚焦双层ViewPager2嵌套结构下的状态主权划分

weixin_33816821的博客 319

倍福--实现TCP/IP的配置

控制器为CX5120,需要和上位机做通信,选择TCP/IP的通讯方式,本文介绍TCP/IP通信的操作步骤。 目 录 软硬件版本 3 1.1. 倍福Beckhoff 3 1.1.1. 控制器硬件 3 1.1.2. 控制软件 3 1.2. 串口调试助手 3 1.2.1. TCP调试通信助手 3 授权文件 3 2.1 Lib文件 3 2.2. CAB文件 4 PLC程序编写 4 3.1. 引入TCP/IP库文件 4 3.2. Client端程序 5 3.2.1. 建立相关变量 5 3.3.2. 编写连接功能块

weixin_41883890的博客 5730

【网络安全】浅谈数据库攻击复现及相关安全优化

4、准备数据库服务器为了安全正式环境应该把数据库单独放一台服务器,只允许让应用服务器 IP 来访问数据库服务器,通过独立两者,就算其中一台发生问题,另一台也是好的,进一步降低了危险性。5、定时备份数据库开发定时备份功能,可以使用 Crontab,或者其他框架,设定周期备份数据,哪怕是数据丢失或被删除也可以快速恢复。

2401_88545587的博客 221

彻底解决Android滚动难题:Scrollable库的10种创新用法与实战指南

你是否还在为Android应用中的复杂滚动交互而头疼?尝试过多种方案却始终无法实现丝滑的滚动体验?本文将带你深入探索Scrollable库——这个仅有轻量级体积却能解决90%滚动场景的强大工具,从基础集成到高级定制,从常见问题到性能优化,一站式掌握Android滚动技术的核心奥秘。 读完本文你将获得: - Scrollable库的核心工作原理与架构解析 - 10种实战场景的完整实现代码(含列表、

gitblog_01199的博客 453

dht11在oled上显示温度 stm32l432kc,如何实现?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1202

ViewPager之onPageScrolled的动画

其实这篇文章早就想写了,一直没空,马上就要出差了,于是想在出差前把这个赶紧写出来,要不真是到猴年马月了。    首先一张GIT 镇楼,无图无真相,只有图才能让你看到我今天要写的内容是什么,也不浪费各位大佬的时间。 这是我们的Ui 设计的一款 APP 引导图,其实刚顶下这个需求的时候,我们的UI 已经自己把这个效果在ProtoPie 上 效果给做出来了。 当时还在忙其他的事情,第一眼看

唯爱丶卡卡西的博客 4001

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

viewpager.addOnPageChangeListener三个重写方法参数分析

在给viewpager加监听器的时候,发现setOnPageChangeListener已经过期了,查源码才知被addOnPageChangeListener替代了… 下面开始对viewpager.addOnPageChangeListener三个重写方法参数分析

mpxl163的博客 5076

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

ViewPager的setOnPageChangeListener接口三个方法详解

1.onPageSelected(int position):这个方法有一个参数position,代表哪个页面被选中。当用手指滑动翻页的时候,如果翻动成功了(滑动的距离够长),手指抬起来就会立即执行这个方法,position就是当前滑动到的页面。如果直接setCurrentItem翻页,那position就和setCurrentItem的参数一致,这种情况在onPageScrolled执行方法前就...

Simon 984

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

ViewPager的onPageScrolled()回调方法的运用

u014628886的博客 1745

面试题记录第一节——(activity、fragment)

activity一、问:什么是activity呢?答:安卓是与用户交互的结果,他提供了一个界面让用户点击、各种滑动等操作。这个界面的存在就是activityd存在的意义。二、问:activity的四中状态?答:running - paused - stopped - killed==处于栈顶,正在运行 - 暂停(失去了用户操作的能力,并不一定不可见) - 停止(界面不可见) - 删除状态(activ

bobo89455100的博客 804

android onpagescrolled参数,android – 未调用ViewPager onPageScrolled事件

下面的代码滚动4页就好了.我的问题是滚动页面时不会触发onPageScrolled事件.无论我是否使用myPager.SetOffsccreenPageLimit(4)命令,都会发生这种情况.阅读文档之后,我理解当我实现MyPagerAdapter类中包含的ViewPager.OnPageChangeListener时,应该触发事件.我究竟做错了什么?谢谢,加里布莱克利public void on...

weixin_31545945的博客 436

【Android】OnpageChangeListener

1、onPageSelected(int position)常用 position是表示你当前选中的页面,这事件是在你页面跳转完毕的时候调用的。 2、public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) 当页面在滑动的时候会调用此方法,在滑动被停止之前,此方法回

Biligle的博客 800

ViewPager滑动事件OnPageChangeListener

使用ViewPager控件的时候,需要实现OnPageChangeListener接口,而OnPageChangeListener这个接口时必须实现三个方法:onPageScrollStateChanged,onPageScrolled ,onPageSelected方法。

1万+

android Viewpager onscrolled事件使用

OnPageScrolled事件参数 position表示当前正在显示的页面索引,如果向右滑动表示将要显示的页面的position,向左滑动表示将要消失的页面的position,positionOffsetPixels表示页面移动的像素数,可用于实现android页面滑动时差动画效果ViewPager.OnPageChangeListener mPageChangeList...

weixin_34256074的博客 382

ViewPager.OnPageChangeListener方法的含义

最近在写ViewPager的指示器,不可避免用到这个监听器,也调试了很久,由于是事后写的,也没截图,谈谈这几个方法的含义。**如有错误,请一定要指正,谢谢!** ## 1.onPageScrolled 官方api: public abstract void onPageScrolled (int position, float positionOffset, int positionOff

孤独正患者的专栏 7021

Android——ViewPager滑动

ViewPager滑动接听会涉及到几个部分,点击,状态改变和滑动状态,以前对这几个方法的参数不了解,很多效果都不知道怎么实现,现在利用这些参数就能做出很多效果。1、onPageSelected(int arg0):选中了ViewPager的第几个页面2、onPageScrolled(int arg0, float arg1, int arg2):页面正在滑动 arg

调上调下的女生 921
上一篇: 超赞!!Android视图讲解!!以及Android内坐标分析!!!
下一篇: ActionBarDrawerToggle与DrawerLayout
Manaasdfasdf
博客等级 码龄11年 131粉丝 151原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值