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状态;当在最后一页继续向右滑动时,
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方法中检测第二个参数
的变化等等,所以动动手,可以学会的东西还是挺多的。