ViewPager的setOnPageChangeListener方法详解

转载自:http://blog.csdn.net/u014544193/article/details/44239807

在使用ViewPager时,总是忘记OnPageChangeListener的三个重写方法的执行顺序以及特点,每次都需要重新打印日志,来弄清楚其中的秘密。今天把它贴出来,毕竟好记性不如烂笔头吗.......

ViewPager.setOnPageChangeListener需要传入OnPageChangeListener的实现类对象。其中需要重写三个方法:onPageSelected、onPageScrolled、onPageScrollStateChanged


viewpager有两种操作:一种是根据手势进行滑动;还有一种就是setCurrentItem(一般用于点击tab,来设置setCurrentItem)。待会会对这两种情况做分别的介绍

根据手势进行滑动:

注:这是页面滑动的过程,左边是从第一个页面滑动到第二个页面,右边是从第二个页面滑动到第一个页面,上图包含了滑动过程中方法执行的顺序以及各个参数值得变化。

1、onPageSelected(int position) :这个方法中有一个参数position,代表目的页面。如果在手指滑动的过程中,页面滑动成功了,在手指抬起的时候会执行方法。其中position就是当前滑动到的页面。


2、onPageScrolled(int position,float positionOffset, int positionOffsetPixels):这个方法中有三个参数:

position:当用手指滑动时,如果手指按在页面上不动,position和当前页面index是一致的;如果手指向左滑动时,position大部分时间和当前页面的index是一致的,只有在翻页成功的时候,最后一次调用该方法时才会变为目标页面;如果手指向右滑动时,position和目标页面的index是一致的,只有在翻页不成功的情况下,最后一次调用该方法时,才会变为原页面

注:技巧:position大部分时间和左边的页面的index保持一致


positionOffset:页面滑动的比例,向左滑动时,这个值从0不断变大,最后在趋近1的时候,突变为0;向右滑动时,这个值从1不断变小,最后变为0

注:技巧:positionOffset大部分时间和右边的页面的比例保持一致


positionOffsetPixels:页面滑动像素,向左滑动时,这个值从0不断变大,最后在趋近屏幕宽度的时候,突变为0,;向右滑动时,这个值屏幕宽度不断变小,最后变为0

注:技巧:positionOffsetPixels大部分时间和右边的页面的宽度保持一致


3、onPageScrollStateChanged(int state):这个方法在手指操作屏幕时发生变化;有三个值:0(end)、1(press)、2(up)

手指滑动翻页时,会执行这个方法,当手指按下时,state=1,手指发生了滑动(哪怕只有一点滑动),当抬起时,state=2,最后state=0,表示结束;当手指按下没有滑动,state先变为1,后来变为0;

三个方法执行的顺序:手指拖动翻页成功:最先执行一次onPageScrollStateChanged(1),然后不断的执行onPageScrolled,当手指抬起的时候,会立即执行一次onPageScrollStateChanged(2),然后会立即执行onPageSelected,然后不断的执行onPageScrolled,最后执行一次onPageScrollStateChanged(0)


setCurrentItem情况分析:




1、onPageSelected(int position) :参数position,代表目的页面。手指抬起的时候会该方法。其中position就是目标页面。


2、onPageScrolled(int position,float positionOffset, int positionOffsetPixels):这个方法中有三个参数:

position:如果点击的tab比较靠后时,position大部分时间和当前页面的index是一致的,只有在翻页成功的时候,最后一次调用该方法时才会变为目标页面;如果点击的tab比较靠前时,position始终和目标页面的index是一致的

注:技巧:position大部分时间和左边的页面的index保持一致


positionOffset:如果点击的tab比较靠后时,这个值从0不断变大,最后在趋近1的时候,突变为0;点击的tab比较靠前时,这个值从1不断变小,最后变为0

注:技巧:positionOffset大部分时间和右边的页面的比例保持一致


positionOffsetPixels:如果点击的tab比较靠后时,这个值从0不断变大,最后在趋近屏幕宽度的时候,突变为0;点击的tab比较靠前时,这个值屏幕宽度不断变小,最后变为0

注:技巧:positionOffsetPixels大部分时间和右边的页面的宽度保持一致


3、onPageScrollStateChanged(int state):这个方法在手指点击tab时发生变化;有两个值:0(end)、2(up)

当手指点击tab时,会执行这个方法,当手指抬起时,state=2,最后state=0,表示结束;

三个方法执行的顺序:最先执行一次onPageScrollStateChange(2),然后立即执行onPageSelected,然后不断执行onPageScroll,最后执行一次onPageStateChange(0)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值