ViewPager—02图片无限轮播

布局文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="200dp" >

        <android.support.v4.view.ViewPager
            android:id="@+id/vp"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

        <LinearLayout
            android:id="@+id/ll_point"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_centerInParent="true"
            android:layout_marginBottom="20dp"
            android:orientation="horizontal" />
    </RelativeLayout>

</RelativeLayout>

相关代码

  1 public class MainActivity extends Activity {
  2 
  3     private ViewPager mViewPager;
  4     private LinearLayout mLlPoint;
  5     private MyAdapter mAdapter;
  6 
  7     private int[] ids = {R.drawable.a1,R.drawable.a2,R.drawable.a3};
  8     private List<ImageView> mImages;
  9     private int lastPos;
 10     private boolean isRunning;
 11 
 12     private Handler mHandler = new Handler() {
 13         public void handleMessage(android.os.Message msg) {
 14             switch(msg.what){
 15             case 0:
 16 
 17                 mViewPager.setCurrentItem(mViewPager.getCurrentItem() + 1);
 18 
 19                 if (isRunning) {
 20                     mHandler.sendEmptyMessageDelayed(0,3000);
 21                 }
 22 
 23                 break;
 24 
 25             default:
 26                 break;
 27             }
 28         };
 29     };
 30 
 31     @Override
 32     protected void onCreate(Bundle savedInstanceState) {
 33         super.onCreate(savedInstanceState);
 34         setContentView(R.layout.activity_main);
 35 
 36         initView();
 37         initData();
 38 
 39         mAdapter = new MyAdapter();
 40         mViewPager.setAdapter(mAdapter);
 41         mViewPager.addOnPageChangeListener(new PagerChnageListener());
 42         mViewPager.setCurrentItem((mImages.size()) * 1000);
 43 
 44         isRunning = true;
 45         mHandler.sendEmptyMessageDelayed(0,3000);
 46     }
 47 
 48     private void initView() {
 49         mViewPager = (ViewPager)findViewById(R.id.vp);
 50         mLlPoint = (LinearLayout)findViewById(R.id.ll_point);
 51     }
 52 
 53     private void initData() {
 54 
 55         mImages = new ArrayList<ImageView>();
 56 
 57         for (int i = 0;i < ids.length;i++) {
 58             ImageView iv = new ImageView(this);
 59             iv.setBackgroundResource(ids[i]);
 60             mImages.add(iv);
 61 
 62             View view = new View(this);
 63             view.setBackgroundResource(R.drawable.point_selector);
 64             LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(Utils.dip2px(this,10),
 65                     Utils.dip2px(this,10));
 66             if (i != 0) {
 67                 params.leftMargin = 20;
 68                 view.setEnabled(false);
 69             }else {
 70                 view.setEnabled(true);
 71             }
 72             view.setLayoutParams(params);
 73             mLlPoint.addView(view);
 74         }
 75     }
 76 
 77     class MyAdapter extends PagerAdapter {
 78 
 79         @Override
 80         public int getCount() {
 81             return Integer.MAX_VALUE;
 82         }
 83 
 84         @Override
 85         public boolean isViewFromObject(View arg0,Object arg1) {
 86             return arg0 == arg1;
 87         }
 88 
 89         @Override
 90         public Object instantiateItem(ViewGroup container,int position) {
 91             ImageView view = mImages.get(position % mImages.size());
 92 
 93             // 增加异常扑捉防止空白页
 94             try {
 95                 ((ViewPager)container).addView(view,0);
 96             }catch(Exception e) {
 97                 e.printStackTrace();
 98             }
 99             return view;
100         }
101 
102         @Override
103         public void destroyItem(ViewGroup container,int position,Object object) {
104             // 防止2/3个出现BUG
105             // container.removeView(mImages.get(position % mImages.size()));
106         }
107     }
108 
109     class PagerChnageListener implements OnPageChangeListener {
110 
111         /* state: 0空闲,1是滑行中,2加载完毕 */
112         @Override
113         public void onPageScrollStateChanged(int state) {
114             switch(state){
115             case 0:
116                 isRunning = true;
117                 break;
118             case 1:
119                 isRunning = false;
120                 break;
121             case 2:
122                 isRunning = true;
123                 break;
124 
125             default:
126                 break;
127             }
128         }
129 
130         @Override
131         public void onPageScrolled(int position,float positionOffset,int positionOffsetPixels) {
132 
133         }
134 
135         @Override
136         public void onPageSelected(int position) {
137             int pos = position % mImages.size();
138             mLlPoint.getChildAt(lastPos).setEnabled(false);
139             mLlPoint.getChildAt(pos).setEnabled(true);
140             lastPos = pos;
141         }
142     }
143 
144     @Override
145     protected void onDestroy() {
146         super.onDestroy();
147         isRunning = false;
148         mHandler.removeCallbacksAndMessages(null);
149     }
150 }

 

 效果图

ViewPager—02图片无限轮播