【Android Tricks 6】ViewPager首页与尾页的滑动动作响应

时间:2023-03-09 20:06:01
【Android Tricks 6】ViewPager首页与尾页的滑动动作响应

ViewPager能够说是Android应用中使用比較广发的一个组件了。它能够帮助我们非常

方便地实现滑动更换View的效果。刚好近期搞的一个项目有一个需求用到了这个,同

时是要能在首页和尾页滑动时可以进行响应,而不是像默认的那样没有不论什么动作,所

以略微研究了下,希望能够对大家有所帮助。

在分析了需求之后。发现这个应该是和ViewPager的换页监听有联系,于是做了个小

demo。通过实验来寻找问题的解决方式。

首先贴出换页监听器的几个public方法以及第一个方法中state数字代表的含义,例如以下

图所看到的。

【Android Tricks 6】ViewPager首页与尾页的滑动动作响应
【Android Tricks 6】ViewPager首页与尾页的滑动动作响应

这里我们重点关注前两个方法,它们和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信息如右:【Android Tricks 6】ViewPager首页与尾页的滑动动作响应。能够发现以以1开头,以0结尾

(数字的含义请參看上面所给图中关于state的解释);当在中间页向右滑动时,log信息

例如以下所看到的,此时从1经历了2的状态。最后到了0状态。当在最后一页继续向右滑动时。

【Android Tricks 6】ViewPager首页与尾页的滑动动作响应

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGVuZ2JvZGI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

log信息如右:【Android Tricks 6】ViewPager首页与尾页的滑动动作响应,和情况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方法中检測第二个參数

的变化等等。所以动动手。能够学会的东西还是挺多的。