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 立即下载

相关推荐

量子阱技术解析:从基础原理到前沿应用

本文深入解析量子阱技术,从微观“能量游泳池”的基础原理出发,阐释了其通过限制电子实现能级量子化,从而精确调控发光波长的核心机制。文章详细探讨了量子阱在半导体激光器和LED中的革命性应用,如实现低阈值电流与高亮度显示,并展望了其在能带工程及量子级联激光器等前沿领域的发展与挑战。

weixin_29267307的博客 282

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

实战指南:从零搭建ROS2 + Cartographer 2D激光SLAM系统

本文详细介绍了如何从零开始搭建ROS2与Cartographer结合的2D激光SLAM系统,涵盖环境准备、激光雷达驱动配置、Cartographer安装与参数调优等关键步骤。通过实战案例和常见问题解决方案,帮助开发者快速掌握激光雷达建图技术,提升机器人自主导航能力。

weixin_29062255的博客 403

android onpagescrolled 参数,Android

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

weixin_30125497的博客 667

深入解析Mifare Classic Crypto1认证流程与密钥交换机制

本文深入解析Mifare Classic Crypto1认证流程与密钥交换机制,详细介绍了Crypto1加密算法的工作原理、认证初始化阶段、随机数交换与密钥流生成过程,以及双向验证步骤。文章还分析了Mifare Classic的安全漏洞,包括随机数生成缺陷和密钥流恢复攻击,并提供了Proxmark3实战演示和防护建议。

c6d7e8f9g的博客 898

XGBoost调参新姿势:Bayesian优化实战指南(附完整代码)

本文详细介绍了如何使用Bayesian优化方法高效调优XGBoost模型参数。通过解析Bayesian优化核心原理和XGBoost关键参数,提供完整的实战代码示例,帮助读者掌握这一智能调参技术,显著提升模型性能。文章特别适合机器学习工程师和数据科学家阅读。

weixin_42536058的博客 366

OnPageChangeListener-->>onPageScrolled

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

乱七八糟 2678

法律AI工具横评:Kimi Work与WorkBuddy,谁更适合法律人?

在人工智能技术日益普及的今天,自然语言处理(NLP)和大语言模型(LLM)正深刻改变着专业领域的工作范式。其核心原理在于通过海量数据训练,使模型能够理解、生成和推理人类语言。这一技术价值在于将从业者从繁琐、重复的信息处理工作中解放出来,极大提升工作效率与知识获取的便捷性。在法律、金融、咨询等对文本处理要求极高的行业,AI助手已展现出在文档分析、信息检索和内容生成方面的巨大潜力。具体到法律应用场景,AI工具能够辅助完成合同审查、法律检索和文书起草等核心任务,成为专业人士的得力助手。本文聚焦于近期备受关注的两款

weixin_30279671的博客 561

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

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

weixin_33816821的博客 319

Simulink开发项1000例实战专栏--实例64:基于Simulink构建一个储能系统模型

通过引入储能系统,太阳能电站能够实现在白天储存多余的能量,在夜晚释放能量,平滑负荷曲线,提高电网的稳定性和可靠性。本项目的目标是基于Simulink平台,构建一个完整的储能系统模型,并通过仿真验证其在电网调峰中的应用效果。通过引入储能系统,工业园区能够实现在负荷高峰期释放能量,在负荷低谷期储存能量,平滑负荷曲线,降低用电成本,提高电网的稳定性和可靠性。通过引入储能系统,风力发电场能够实现在负荷高峰期释放能量,在负荷低谷期储存能量,平滑负荷曲线,提高电网的稳定性和可靠性。

xiaoheshang_123的博客 516

Android Framework WMS面试题及参考答案

什么是 WindowManagerService(WMS)?它的作用是什么? WindowManagerService(WMS)是 Android 系统中非常重要的一个系统服务。它运行在系统进程(system_server 进程)中。 从本质上来说,WMS 是 Android 窗口管理系统的核心。它负责管理系统中的所有窗口,包括应用程序窗口、系统窗口(如状态栏、导航栏)等。 它的主要作用有很多。首先是窗口的创建和销毁。当一个应用请求创建一个窗口时,WMS 会协调各个模块完成窗口的创建工

大模型大数据攻城狮的专栏 2164

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

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

gitblog_01199的博客 453

092、多sensor帧同步在环视系统中的实现——基于瑞芯微RK3588的PPS同步与曝光同步方案

摘要: 本文探讨了瑞芯微RK3588平台在360环视系统中实现多摄像头帧同步的技术方案。针对环视拼接常见的动态场景错位问题,提出了PPS同步与曝光同步相结合的解决方案。通过GPIO硬件触发实现四路摄像头同步曝光,配合I2C全局曝光控制,将时间误差控制在0.5ms内。文章详细解析了RK3588设备树配置、内核驱动实现中的关键细节,包括同步信号处理、寄存器原子写入等核心技术点,并分享了量产中遇到的温度漂移、信号完整性等实际问题及解决方法。最终通过硬件整形和电源优化,将同步抖动控制在±5μs以内,有效解决了动态拼

zzfmlxs的博客 34

ViewPager之onPageScrolled的动画

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

唯爱丶卡卡西的博客 4001

WINCC7.3破解文件

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

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

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

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

mpxl163的博客 5076

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

ViewPager的setOnPageChangeListener接口三个方法详解

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

Simon 984

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

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、付费专栏及课程。

余额充值