1.5.8 Android 简单最实用的方式实现ViewPager无限循环两种方式

效果图:

 

第一种:

实现原理 :

              有三张图片,实现无限循环。在viewpager中设置5个view,第一个为三张图片的最后一张,第五张为三张图片的第一张。图片顺序如下数字:

                                         2-0-1-2-0

             0-1-2为正常的三个图片。2,0  为添加的两个图片view

滑动的顺序:进入页面显示0图片,向右滑动到0时,将0页设置为0,则可以继续向右滑动。同理当向左滑动到  2 时,将2页设置为2。

 

 

 

下面贴代码:

ViewpagerDemo.java

package com.example.demo;  
  
import java.util.ArrayList;  
import java.util.List;  
  
import android.app.Activity;  
import android.os.Bundle;  
import android.support.v4.view.PagerAdapter;  
import android.support.v4.view.ViewPager;  
import android.support.v4.view.ViewPager.OnPageChangeListener;  
import android.view.View;  
import android.view.ViewGroup;  
import android.widget.ImageView;  
  
public class ViewpagerDemo extends Activity implements OnPageChangeListener {  
  
    private ViewPager viewPager;  
    private List listviews;  
    private int[] pics = { R.drawable.xu1, R.drawable.xu2, R.drawable.xu3 };  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.viewpager);  
  
        viewPager = (ViewPager) findViewById(R.id.viewpager);  
        listviews = new ArrayList();  
        // 添加viewpager多出的两个view  
        int length = pics.length + 2;  
        for (int i = 0; i < length; i++) {  
            ImageView imageView = new ImageView(ViewpagerDemo.this);  
            ViewGroup.LayoutParams viewPagerImageViewParams = new ViewGroup.LayoutParams(  
                    ViewGroup.LayoutParams.FILL_PARENT,  
                    ViewGroup.LayoutParams.FILL_PARENT);  
            imageView.setLayoutParams(viewPagerImageViewParams);  
            imageView.setScaleType(ImageView.ScaleType.FIT_XY);  
            listviews.add(imageView);  
        }  
  
        viewPager.setAdapter(new ViewPagerAdapter());  
        viewPager.setOnPageChangeListener(ViewpagerDemo.this);  
        // 设置viewpager在第二个视图显示  
        viewPager.setCurrentItem(1);  
    }  
  
    @Override  
    public void onPageScrollStateChanged(int arg0) {  
  
    }  
  
    @Override  
    public void onPageScrolled(int arg0, float arg1, int arg2) {  
    }  
  
    @Override  
    public void onPageSelected(int i) {  
  
        int pageIndex = i;  
  
        if (i == 0) {  
            // 当视图在第一个时,将页面号设置为图片的最后一张。  
            pageIndex = pics.length;  
        } else if (i == pics.length + 1) {  
            // 当视图在最后一个是,将页面号设置为图片的第一张。  
            pageIndex = 1;  
        }  
        if (i != pageIndex) {  
            viewPager.setCurrentItem(pageIndex, false);  
            return;  
        }  
    }  
  
    class ViewPagerAdapter extends PagerAdapter {  
  
        @Override  
        public void destroyItem(ViewGroup container, int position, Object object) {  
            ImageView view = listviews.get(position);  
            container.removeView(view);  
            view.setImageBitmap(null);  
        }  
  
        @Override  
        public Object instantiateItem(ViewGroup container, int i) {  
            if (i == 0) {  
                listviews.get(i).setImageResource(pics[2]);  
            } else if (i == (listviews.size() - 1)) {  
                listviews.get(i).setImageResource(pics[0]);  
            } else {  
                listviews.get(i).setImageResource(pics[i - 1]);  
            }  
            container.addView(listviews.get(i));  
            return listviews.get(i);  
        }  
  
        @Override  
        public int getCount() {  
            return listviews.size();  
        }  
  
        @Override  
        public boolean isViewFromObject(View view, Object o) {  
            return view == o;  
        }  
    }  
}  


第二种:
实现原理:在适配器中将getcount的值设置为无限大。然后将3份图片加载其中。

 

 

 

package com.example.demo;  
  
import java.util.ArrayList;  
import java.util.List;  
  
import android.app.Activity;  
import android.os.Bundle;  
import android.support.v4.view.PagerAdapter;  
import android.support.v4.view.ViewPager;  
import android.support.v4.view.ViewPager.OnPageChangeListener;  
import android.util.Log;  
import android.view.View;  
import android.view.ViewGroup;  
import android.widget.ImageView;  
  
public class ViewpagerDemo2 extends Activity {  
  
    private ViewPager viewPager;  
    private List listviews;  
    private int[] pics = { R.drawable.xu1, R.drawable.xu2, R.drawable.xu3 };  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.viewpager);  
  
        viewPager = (ViewPager) findViewById(R.id.viewpager);  
        listviews = new ArrayList();  
        for (int i = 0; i < pics.length; i++) {  
            ImageView imageView = new ImageView(ViewpagerDemo2.this);  
            ViewGroup.LayoutParams viewPagerImageViewParams = new ViewGroup.LayoutParams(  
                    ViewGroup.LayoutParams.FILL_PARENT,  
                    ViewGroup.LayoutParams.FILL_PARENT);  
            imageView.setLayoutParams(viewPagerImageViewParams);  
            imageView.setScaleType(ImageView.ScaleType.FIT_XY);  
            imageView.setImageResource(pics[i]);  
            listviews.add(imageView);  
        }  
        viewPager.setAdapter(new ViewPagerAdapter());  
        viewPager.setCurrentItem(499);  
    }  
  
    class ViewPagerAdapter extends PagerAdapter {  
  
        @Override  
        public Object instantiateItem(ViewGroup container, int position) {  
            if (listviews.get(position % listviews.size()).getParent() != null) {  
                ((ViewPager) listviews.get(position % listviews.size())  
                        .getParent()).removeView(listviews.get(position  
                        % listviews.size()));  
            }  
            ((ViewPager) container).addView(  
                    listviews.get(position % listviews.size()), 0);  
            return listviews.get(position % listviews.size());  
        }  
  
        @Override  
        public int getCount() {  
            return Integer.MAX_VALUE;  
        }  
  
        @Override  
        public boolean isViewFromObject(View view, Object o) {  
            return view == o;  
        }  
    }  
}

 

 

以上转载:http://blog.csdn.net/just_sanpark/article/details/17436037

 

 

 

你可能感兴趣的:(1.5,ANDROID)