在用到:viewpage时,发现这个:viewpage在左右滑动的时候,无法进行循环,在:viewpage处于第一个或最后的一页面时,无法再次进行滑动,只能逆向滑动。但看其它很多优秀的应用,在:viewpage处理时,是可以进行无限循环滑动,于是便研究了一下,发现其实这个效果是很容易做到的。
首先,在用到:viewpage时,对于PagerAdapter我们肯定都很熟悉,这个类主要是处理:viewpage中的视图的加载和销毁,一般我们都需要复写四个方法,分别是:
getCount ();
isViewFromObject(视图arg0,对象__arg1);
destroyItem(视图容器,int位置、对象对象),
对象instantiateItem(视图容器,int位置);
第一个方法:getCount()是为了获得:viewpage的视图组中的个数,方法:isViewFromObject是为了判断要显示的页面是否为我们设置的视图组中视图的
使:viewpage进行循环滑动的思路如下:首先我们肯定保定在getCount方法返回的数字为无限大,这样它才可以知道组中有无限多个,因此在设置getCount的时候,我返回的是固定的Integer.MAXVALUE。
其次,我们要保证这些个页面是我们设置的固定的几个页面,所以我们在初始化页面及销毁页面时,保证一直我们设置的这些个页面,故此处就是用到的求余的算法,也就是%。
PagerAdapter VPagerAdapter=new PagerAdapter () {
@Override
公共int getCount () {
返回Integer.MAX_VALUE;
}
@Override
公共布尔isViewFromObject(视图arg0,对象__arg1) {
int pos=(整数)__arg1 %数;
布尔f=arg0==groupview.get (pos);
返回f;
}
@Override
公共空间destroyItem(视图容器,int位置、对象对象){
int pos=%计算位置;
=groupview.get视图视图(pos);
((: viewpage)容器).removeView(视图);}
@Override
公共对象instantiateItem(视图容器,int位置){
,,,,,,,int pos=位置% viewlist.size ();
,,,,视图,视图=viewlist.get (pos);
,,,,父母,ViewGroup=(ViewGroup) view.getParent ();
,,,,,如果(父!=null) {
,,,,,,,parent.removeView(视图),
,,,,,}
,,,,((:viewpage)容器).addView(视图),
,,,,,返回位置;
}
};
主要代码如上,计数是我们的视图组中视图的个数。
附演示的下载地址:https://github.com/maliankun/viewpagertest/archive/master.zip