资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

android的viewpager如何实现左右循环

在用到viewpager时,发现这个viewpager在左右滑动的时候,无法进行循环,在viewpager处于第一个或最后的一页面时,无法再次进行滑动,只能逆向滑动。但看其它很多优秀的应用,在viewpager处理时,是可以进行无限循环滑动,于是便研究了一下,发现其实这个效果是很容易做到的。

城关ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:13518219792(备注:SSL证书合作)期待与您的合作!

首先,在用到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


分享名称:android的viewpager如何实现左右循环
本文路径:http://www.cdkjz.cn/article/gshcgi.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220