ViewPager能够说是Android应用中使用比較广发的一个组件了。它能够帮助我们非常
方便地实现滑动更换View的效果。刚好近期搞的一个项目有一个需求用到了这个,同
时是要能在首页和尾页滑动时可以进行响应,而不是像默认的那样没有不论什么动作,所
以略微研究了下,希望能够对大家有所帮助。
在分析了需求之后。发现这个应该是和ViewPager的换页监听有联系,于是做了个小
demo。通过实验来寻找问题的解决方式。
首先贴出换页监听器的几个public方法以及第一个方法中state数字代表的含义,例如以下
图所看到的。
这里我们重点关注前两个方法,它们和scroll动作相关。详细实验代码例如以下:
private OnPageChangeListener pageChangeListener = new OnPageChangeListener() { @Override public void onPageSelected(int arg0) { // TODO Auto-generated method stub } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { // TODO Auto-generated method stub Log.d("TestActivity", arg0+","+arg1+","+arg2); } @Override public void onPageScrollStateChanged(int arg0) { // TODO Auto-generated method stub Log.d("TestActivity", arg0+""); } };
当在首页往左滑动时,log信息如右:。能够发现以以1开头,以0结尾
(数字的含义请參看上面所给图中关于state的解释);当在中间页向右滑动时,log信息
例如以下所看到的,此时从1经历了2的状态。最后到了0状态。当在最后一页继续向右滑动时。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGVuZ2JvZGI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >
log信息如右:,和情况1类似。状态从1变到了0,可是第二行是以2开
头的,而情况1是以0开头的(測试用例一共是3页。也就是说第二行开头数字代表的
是该页的编号),实验到此就结束了。
综上可得,假设要在首页往左滑动时响应动作能够例如以下写,同理假设要想在最后一
private OnPageChangeListener pageChangeListener = new OnPageChangeListener() { @Override public void onPageSelected(int arg0) { // TODO Auto-generated method stub } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { // TODO Auto-generated method stub //Log.d("TestActivity", arg0+","+arg1+","+arg2); curPage = arg0; } @Override public void onPageScrollStateChanged(int arg0) { // TODO Auto-generated method stub //Log.d("TestActivity", arg0+""); if (preState == 1 && arg0 == 0 && curPage == 0) { your action... } preState = arg0; } };
页往右滑动时响应动作,仅仅要将推断第三个方法中推断条件中的"curPage == 0"改为
"curPage == view size - 1"就可以。
在这个实验中我们仅仅使用了部分数据,其它数据事实上也是非常实用的,比方你要想
实现滑动到页面的一半时响应动作,就能够在onPageScrolled方法中检測第二个參数
的变化等等。所以动动手。能够学会的东西还是挺多的。