十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
在用到viewpager时,发现这个viewpager在左右滑动的时候,无法进行循环,在viewpager处于第一个或最后的一页面时,无法再次进行滑动,只能逆向滑动。但看其它很多优秀的应用,在viewpager处理时,是可以进行无限循环滑动,于是便研究了一下,发现其实这个效果是很容易做到的。
成都创新互联公司于2013年成立,先为三元等服务建站,三元等地企业,进行企业商务咨询服务。为三元企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。首先,在用到viewpager时,对于PagerAdapter 我们肯定都很熟悉,这个类主要是处理viewpager中的view的加载和销毁,一般我们都需要复写四个方法,分别是:
getCount();
isViewFromObject(View arg0, Object arg1);
destroyItem(View container, int position, Object object);
Object instantiateItem(View container, int position);
第一个方法:getCount() 是为了获得viewpager的view组中的个数,方法:isViewFromObject是为了判断要显示的页面是否为我们设置的view组中的view(个人理解),其它的两个方法分别是用来销毁和初始化view的。
使viewpager进行循环滑动的思路如下:首先我们肯定保定在getCount方法返回的数字为无限大,这样它才可以知道group中有无限多个,因此在设置getcount的时候,我返回的是固定的Integer.MAXVALUE。
其次,我们要保证这些个页面是我们设置的固定的几个页面,所以我们在初始化页面及销毁页面时,保证一直我们设置的这些个页面,故此处就是用到的求余的算法,也就是%.
PagerAdapter VPagerAdapter = new PagerAdapter() {
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
int pos = (Integer)arg1 % count;
boolean f = arg0 == groupview.get(pos);
return f;
}
@Override
public void destroyItem(View container, int position, Object object) {
int pos = position % count;
View view = groupview.get(pos);
((ViewPager) container).removeView(view);
}
@Override
public Object instantiateItem(View container, int position) {
int pos = position % viewlist.size();
View view = viewlist.get(pos);
ViewGroup parent = (ViewGroup) view.getParent();
if (parent != null) {
parent.removeView(view);
}
((ViewPager) container).addView(view);
return position;
}
};
主要代码如上,count是我们的view组中view的个数。
附demo的下载地址:https://github.com/maliankun/viewpagertest/archive/master.zip
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。