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

来源:互联网 发布:淘宝上能买到av碟片吗 编辑:程序博客网 时间:2024/04/29 13:35

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


先上效果:

                                

第一种:

实现原理

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

                                         2-0-1-2-0

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

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


下面贴代码:

ViewpagerDemo.java

[java] view plaincopy
  1. package com.example.demo;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import android.app.Activity;  
  7. import android.os.Bundle;  
  8. import android.support.v4.view.PagerAdapter;  
  9. import android.support.v4.view.ViewPager;  
  10. import android.support.v4.view.ViewPager.OnPageChangeListener;  
  11. import android.view.View;  
  12. import android.view.ViewGroup;  
  13. import android.widget.ImageView;  
  14.   
  15. public class ViewpagerDemo extends Activity implements OnPageChangeListener {  
  16.   
  17.     private ViewPager viewPager;  
  18.     private List<ImageView> listviews;  
  19.     private int[] pics = { R.drawable.xu1, R.drawable.xu2, R.drawable.xu3 };  
  20.   
  21.     @Override  
  22.     protected void onCreate(Bundle savedInstanceState) {  
  23.         super.onCreate(savedInstanceState);  
  24.         setContentView(R.layout.viewpager);  
  25.   
  26.         viewPager = (ViewPager) findViewById(R.id.viewpager);  
  27.         listviews = new ArrayList<ImageView>();  
  28.         // 添加viewpager多出的两个view  
  29.         int length = pics.length + 2;  
  30.         for (int i = 0; i < length; i++) {  
  31.             ImageView imageView = new ImageView(ViewpagerDemo.this);  
  32.             ViewGroup.LayoutParams viewPagerImageViewParams = new ViewGroup.LayoutParams(  
  33.                     ViewGroup.LayoutParams.FILL_PARENT,  
  34.                     ViewGroup.LayoutParams.FILL_PARENT);  
  35.             imageView.setLayoutParams(viewPagerImageViewParams);  
  36.             imageView.setScaleType(ImageView.ScaleType.FIT_XY);  
  37.             listviews.add(imageView);  
  38.         }  
  39.   
  40.         viewPager.setAdapter(new ViewPagerAdapter());  
  41.         viewPager.setOnPageChangeListener(ViewpagerDemo.this);  
  42.         // 设置viewpager在第二个视图显示  
  43.         viewPager.setCurrentItem(1);  
  44.     }  
  45.   
  46.     @Override  
  47.     public void onPageScrollStateChanged(int arg0) {  
  48.   
  49.     }  
  50.   
  51.     @Override  
  52.     public void onPageScrolled(int arg0, float arg1, int arg2) {  
  53.     }  
  54.   
  55.     @Override  
  56.     public void onPageSelected(int i) {  
  57.   
  58.         int pageIndex = i;  
  59.   
  60.         if (i == 0) {  
  61.             // 当视图在第一个时,将页面号设置为图片的最后一张。  
  62.             pageIndex = pics.length;  
  63.         } else if (i == pics.length + 1) {  
  64.             // 当视图在最后一个是,将页面号设置为图片的第一张。  
  65.             pageIndex = 1;  
  66.         }  
  67.         if (i != pageIndex) {  
  68.             viewPager.setCurrentItem(pageIndex, false);  
  69.             return;  
  70.         }  
  71.     }  
  72.   
  73.     class ViewPagerAdapter extends PagerAdapter {  
  74.   
  75.         @Override  
  76.         public void destroyItem(ViewGroup container, int position, Object object) {  
  77.             ImageView view = listviews.get(position);  
  78.             container.removeView(view);  
  79.             view.setImageBitmap(null);  
  80.         }  
  81.   
  82.         @Override  
  83.         public Object instantiateItem(ViewGroup container, int i) {  
  84.             if (i == 0) {  
  85.                 listviews.get(i).setImageResource(pics[2]);  
  86.             } else if (i == (listviews.size() - 1)) {  
  87.                 listviews.get(i).setImageResource(pics[0]);  
  88.             } else {  
  89.                 listviews.get(i).setImageResource(pics[i - 1]);  
  90.             }  
  91.             container.addView(listviews.get(i));  
  92.             return listviews.get(i);  
  93.         }  
  94.   
  95.         @Override  
  96.         public int getCount() {  
  97.             return listviews.size();  
  98.         }  
  99.   
  100.         @Override  
  101.         public boolean isViewFromObject(View view, Object o) {  
  102.             return view == o;  
  103.         }  
  104.     }  
  105. <strong>}</strong>  
第二种:
实现原理:在适配器中将getcount的值设置为无限大。然后将3份图片加载其中。
[java] view plaincopy
  1. package com.example.demo;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import android.app.Activity;  
  7. import android.os.Bundle;  
  8. import android.support.v4.view.PagerAdapter;  
  9. import android.support.v4.view.ViewPager;  
  10. import android.support.v4.view.ViewPager.OnPageChangeListener;  
  11. import android.util.Log;  
  12. import android.view.View;  
  13. import android.view.ViewGroup;  
  14. import android.widget.ImageView;  
  15.   
  16. public class ViewpagerDemo2 extends Activity {  
  17.   
  18.     private ViewPager viewPager;  
  19.     private List<ImageView> listviews;  
  20.     private int[] pics = { R.drawable.xu1, R.drawable.xu2, R.drawable.xu3 };  
  21.   
  22.     @Override  
  23.     protected void onCreate(Bundle savedInstanceState) {  
  24.         super.onCreate(savedInstanceState);  
  25.         setContentView(R.layout.viewpager);  
  26.   
  27.         viewPager = (ViewPager) findViewById(R.id.viewpager);  
  28.         listviews = new ArrayList<ImageView>();  
  29.         for (int i = 0; i < pics.length; i++) {  
  30.             ImageView imageView = new ImageView(ViewpagerDemo2.this);  
  31.             ViewGroup.LayoutParams viewPagerImageViewParams = new ViewGroup.LayoutParams(  
  32.                     ViewGroup.LayoutParams.FILL_PARENT,  
  33.                     ViewGroup.LayoutParams.FILL_PARENT);  
  34.             imageView.setLayoutParams(viewPagerImageViewParams);  
  35.             imageView.setScaleType(ImageView.ScaleType.FIT_XY);  
  36.             imageView.setImageResource(pics[i]);  
  37.             listviews.add(imageView);  
  38.         }  
  39.         viewPager.setAdapter(new ViewPagerAdapter());  
  40.         viewPager.setCurrentItem(499);  
  41.     }  
  42.   
  43.     class ViewPagerAdapter extends PagerAdapter {  
  44.   
  45.         @Override  
  46.         public Object instantiateItem(ViewGroup container, int position) {  
  47.             if (listviews.get(position % listviews.size()).getParent() != null) {  
  48.                 ((ViewPager) listviews.get(position % listviews.size())  
  49.                         .getParent()).removeView(listviews.get(position  
  50.                         % listviews.size()));  
  51.             }  
  52.             ((ViewPager) container).addView(  
  53.                     listviews.get(position % listviews.size()), 0);  
  54.             return listviews.get(position % listviews.size());  
  55.         }  
  56.   
  57.         @Override  
  58.         public int getCount() {  
  59.             return Integer.MAX_VALUE;  
  60.         }  
  61.   
  62.         @Override  
  63.         public boolean isViewFromObject(View view, Object o) {  
  64.             return view == o;  
  65.         }  
  66.     }  

0 0
原创粉丝点击