ViewPager相关问题总结
来源:互联网 发布:cx one4.41软件 编辑:程序博客网 时间:2024/06/18 08:52
ViewPager是Android开发中常用控件之一,实现左右滑动的功能。可以与fragment嵌套使用。
在ViewPager控件中,需要实现其监听事件:OnPageChangeListener,然后重写该监听器的三个回调方法:
- public void onPageScrolled(int position, float positionOffset, int
positionOffsetPixels) public void onPageSelected(int position)
public void onPageScrollStateChanged(int state)
其中: onPageScrolled(int position, float positionOffset, int positionOffsetPixels)
:当页面在滑动时会调用此方法,在滑动被停止之前,此方法会一直得到调用。其中三个参数的含义分别为:
- position :当前页面,即你点击滑动的页面;
- positionOffset:表示当前页面偏移的百分比,范围是0~1,用来表示当前页滑动的位置,数值越大,就表示滑动的幅度越大;
- positionOffsetPixels:当前页面偏移的像素位置 。
onPageSelected(int position)
:此方法是页面跳转完后得到调用,position为当前选中页面的position(位置编号)。
onPageScrollStateChanged(int state)
:此方法是在状态改变的时候调用,其中state这个参数有三种状态(0,1,2),分别对应常量SCROLL_STATE_IDLE、SCROLL_STATE_DRAGGING、SCROLL_STATE_SETTLING。state==0 表示什么也不做,state==1 表示正在滑动,state==2 表示滑动完毕。当页面开始滑动的时候,三种状态的变化顺序依次为(1,2,0)。
1、ViewPager如何判断左右滑动的方向
注意到,onPageScrolled 和 onPageSelected 这两个方法中都有一个共同的参数:position,记录当前页面的位置。于是,可以设置一个全局私有变量 currentPageIndex 并初始化为0,将 position 与 currentPageIndex 进行比较,即可在这两个方法中判断左右滑动的方向。
@Override public void onPageSelected(int position) { if (position>currentPageIndex) { Log.i("ViewPager", "从左->右"); currentPageIndex = position;//每次比较后currentPageIndex 重置为当前position return; } if (position<currentPageIndex) { Log.i("ViewPager", "从右->左 "); currentPageIndex = position; return; } if (position==currentPageIndex) { Log.i("ViewPager", "无滑动 "); return; } }
2、ViewPager如何判断已经滑动到第一页或最后一页
@Override public void onPageScrollStateChanged(int state) { switch (state) { case ViewPager.SCROLL_STATE_IDLE: if (viewPager.getCurrentItem() == 0) { Toast.makeText(MainActivity.this, "已经是第一页了",Toast.LENGTH_LONG).show(); }else if (viewPager.getCurrentItem() == viewPager.getAdapter().getCount()-1) { Toast.makeText(MainActivity.this, "已经是最后一页了",Toast.LENGTH_LONG).show(); } break; default: break; } }
3、ViewPager缓存机制、预加载相关
ViewPager 源码中,默认的 DEFAULT_OFFSCREEN_PAGES = 1,会默认缓存相邻的 2 个 Fragment 以便快速切换,非相邻的 Fragment 会被销毁掉。当 limit<0 时,强行将 limit 置为 1 。若设置 limit=N(limit !=1),可以预先加载 N 个页面,适用于如音乐播放时,自动加载歌词。
这就是涉及到 ViewPager 的预加载机制,即如果你处于当前某个页面,会预先加载下一个 Fragment 。但有时候涉及到网络请求或其他的耗时操作,就需要取消掉预加载,否则资源开销大。
默认的 DEFAULT_OFFSCREEN_PAGES = 1,可以通过设置 DEFAULT_OFFSCREEN_PAGES = 0,取消预加载。但这样需要修改jar包。
还有一种方法:见这篇博文
参考:
ViewPager缓存(预加载)机制及如何禁止预加载
- ViewPager相关问题总结
- ViewPager相关总结
- ViewPager相关
- Windows相关问题总结
- MTK相关问题总结
- AspxGridView 相关问题总结
- qwt相关问题总结
- wdos相关问题总结
- QT相关问题总结
- Weblogic相关问题总结
- Eclipse相关问题总结
- 区间相关问题总结
- MySQL相关问题总结
- CocoaPods相关问题总结
- WAS相关问题总结
- ScorllView相关问题总结
- python相关问题总结
- java相关问题总结
- 2016夏季练习
- 总结使用dom4j和xpath对xml文件的增删改查
- 服务器端使用Screen
- Spring学习(二)
- C语言外挂小程序
- ViewPager相关问题总结
- 多态与覆盖
- 数据结构实验之图论六:村村通公路
- FZU 2215 Simple Polynomial Problem (多项式乘法 栈)
- @property的使用策略
- 【u110】灾后重建
- 多态的实现原理
- Gallery 初体验
- Angular—ngRoute