`
苗振忠
  • 浏览: 57712 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

ViewPager的setOnPageChangeListener方法详解

 
阅读更多

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 。


转自:http://www.eoeandroid.com/thread-548173-1-1.html

三个方法的执行顺序为:用手指拖动翻页时,最先执行一遍onPageScrollStateChanged(1),然后不断执行onPageScrolled,放手指的时候,直接立即执行一次onPageScrollStateChanged(2),然后立即执行一次onPageSelected,然后再不断执行onPageScrollStateChanged,最后执行一次onPageScrollStateChanged(0)。

其它的情况由这个可以推出来,不再赘述。


分享到:
评论

相关推荐

    Android自定义引导玩转ViewPager的方法详解

    在Android开发中,ViewPager是一个非常重要的组件,它允许用户通过左右滑动来切换不同的页面,提供了丰富的用户体验。本文将深入探讨如何在Android中自定义引导页以充分利用ViewPager的功能。 首先,我们来了解一下...

    Android ViewPager使用详解

    **Android ViewPager 使用详解** ViewPager是Android开发中一个非常重要的组件,它允许用户通过左右滑动来切换不同的页面,常用于实现应用的滑动导航或展示多个相似内容的页面。在本篇文章中,我们将深入探讨...

    ViewPager使用详解

    【ViewPager使用详解】 ViewPager是Android开发中的一个关键组件,它属于`android.support.v4`库,主要用于实现页面的左右滑动效果,常用于创建类似Tab布局或者多页面切换的场景。由于它在Android 3.0(API Level ...

    ViewPager详解示例

    这个“ViewPager详解示例”将带你深入理解并掌握如何在Android应用中有效利用ViewPager。 1. ViewPager的基本概念 ViewPager是Android Support Library中的一个控件,它可以显示多个Fragment或View,并且可以自动...

    对应源码

    **ViewPager详解(四)——自主实现滑动指示条** 在Android开发中,ViewPager是一个非常重要的组件,它允许用户左右滑动来浏览多个页面,通常用于实现类似轮播图或者Tab切换的效果。本篇将深入讲解如何在ViewPager...

    Android Fragment滑动组件ViewPager的实例详解

    Android Fragment 滑动组件 ViewPager 的实例详解 Android Fragment 滑动组件 ViewPager 是 Android 开发中常用的滑动组件,能够帮助开发者快速创建滑动式用户界面。下面是对 Android Fragment 滑动组件 ViewPager ...

    Android ViewPager画廊效果详解及实例

    Android ViewPager 画廊效果 从上面的图片可以看到,当添加多张图片的时候,能够在下方形成一个画廊的效果,我们左右拉动图片来看我们添加进去的图片,效果是不是好了很多呢?下面来看看怎么实现吧! 上面的效果...

    《ViewPager 详解(一)---基本入门》对应源码

    **ViewPager详解(一)——基本入门** ViewPager是Android SDK中的一个强大的组件,广泛用于实现页面滑动效果,常用于展示多个Tab或者实现类似轮播图的功能。本篇将深入解析ViewPager的基本用法,并通过源码分析来...

    《ViewPager 详解(二)---详解四大函数》对应源码

    这个方法的返回值会被ViewPager用来作为`isViewFromObject`方法的第二个参数,确保View和对象之间的对应关系。 在`TestViewPage_2`的源码中,我们可以看到这些函数的具体实现,以及如何自定义一个PagerAdapter来...

    ViewPager加载Activity

    **ViewPager加载Activity详解** ViewPager是Android开发中一个非常重要的组件,它主要用于实现界面间的滑动切换效果,使得用户可以通过左右滑动来浏览多个视图。在Android应用设计中,ViewPager通常与Fragment配合...

    重写ViewPager方法实现禁止滑动效果

    继承ViewPager,重写方法,实现左右无法滑动的效果。详情可以看下博客。

    完美解决ViewPager两层嵌套滑动问题

    重写了子viewpager的方法,Childviewpager继承了viewpager。解决了父viewpager不能滑动或者子viewpager不能滑动问题。修改了事件的分发。可以使子viewpager滑动到最后一页后直接滑入父viewpager的fragment。修改子...

    Viewpager的使用方法

    【ViewPager的使用方法】 ViewPager是Android SDK中的一个组件,主要用于实现滑动切换多个页面的效果,常用于构建类似Tab布局或无限轮播图等场景。它允许用户通过左右滑动来浏览相邻的页面,通常与PagerAdapter一起...

    viewpager 关于子页面控件监听的解决方法

    一种常见的解决方法是利用ViewPager的`OnPageChangeListener`接口。当页面状态改变时,该接口会回调相应的方法,例如`onPageSelected(int position)`,这个方法会在用户选择新页面时被调用。我们可以在父Activity或...

    android 自定义RecyClerView与ViewPager事件冲突解决方法

    android 自定义RecyClerView与ViewPager事件冲突解决方法。自定义RecyClerView和自定义ViewPager,重写了onInterceptTouchEvent和dispatchTouchEvent方法,实现自定义RecyClerView列表上下滑动,同时也可以自定义...

Global site tag (gtag.js) - Google Analytics