//佈局 <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" > <TextView android:id="@+id/show_info" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#88000000" android:gravity="center" android:textColor="#fff" android:textSize="25sp" /> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/show_info" /> </RelativeLayout> //代碼 public class MainActivity extends Activity implements OnPageChangeListener { private TextView show_info; private ViewPager viewpager; private MypagerAdapter adapter; private List<View> imgList = new ArrayList<View>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 獲取arrays中的資源對象 // 第二種方式 TypedArray typedArray = getResources().obtainTypedArray(R.array.img); for (int i = 0; i < typedArray.length(); i++) { ImageView imageview = new ImageView(this); imageview.setImageDrawable(typedArray.getDrawable(i)); // 當到一個集合中,方便銷燬時調用 imgList.add(imageview); } show_info = (TextView) this.findViewById(R.id.show_info); viewpager = (ViewPager) this.findViewById(R.id.viewpager); // adapter = new MypagerAdapter();//第一種 adapter = new MypagerAdapter(imgList);// 第二種 viewpager.setAdapter(adapter); // 顯示頭部的提示當前多少也,總頁數 show_info.setText(1 + "/" + adapter.getCount()); // 實現監聽方法 viewpager.setOnPageChangeListener(this); } // 使用ViewPager必需要繼承PagerAdapter 或者FragmentPagerAdapter class MypagerAdapter extends PagerAdapter { // 設置數據源 :圖片資源 // 兩種方式設置資源 :1.定義資源數組 2.arrays.xml定義————》drawable view // 第一種方法 private int[] img = { R.drawable.car0, R.drawable.car1, R.drawable.car2, R.drawable.car3, R.drawable.car4, R.drawable.car5, R.drawable.car6, R.drawable.car7, }; private List<View> imgList; @Override public int getCount() { // return img.length; return this.imgList.size(); } public MypagerAdapter(List<View> imgList) { this.imgList = imgList; } public MypagerAdapter() { } @Override public boolean isViewFromObject(View view, Object obj) { // 判斷當前的視圖是不是一個對象,官方文檔建議這樣寫 return view == obj; } // 下面兩個方法要本身手動重寫 @Override // ,每次滑動時都會調用,實例化當前視圖。把一個view放在當前的ViewPager位置中 public Object instantiateItem(ViewGroup container, int position) { // 第一種: // // 上下文能夠上面傳進來,也能夠用下面的方式獲取 // ImageView imageview = new ImageView(container.getContext()); // imageview.setImageResource(img[position]); // // 記得要把imageview放進當前container(屬於pagerVeiw) // container.addView(imageview); // // 而且記得返回視圖 // return imageview; // 第二種;方式 container.addView(this.imgList.get(position)); return this.imgList.get(position); } @Override // 銷燬滑出去的view,position和當前位置相差1左右,(有緩存)考慮滑回去的緩存 public void destroyItem(ViewGroup container, int position, Object object) { // 若是用圖片資源數組沒法銷燬,因此建議用arrays.xml定義資源,放進一個list集合方便刪除 // super.destroyItem(container, position, object); // 第一種方式實現時要把super這個去掉,不然會報錯 // 第二種: container.removeView(this.imgList.get(position));// 用arrays.xml定義資源必定要銷燬,不然回報錯 } } @Override // 頁面滾動的狀態改變 public void onPageScrollStateChanged(int state) { switch (state) { case ViewPager.SCROLL_STATE_DRAGGING:// 拖動狀態 break; case ViewPager.SCROLL_STATE_IDLE:// 中止狀態 break; case ViewPager.SCROLL_STATE_SETTLING:// 處於自動滾動時狀態 break; } } @Override // 參數:一、位置,二、位置 的偏移量,三、位置偏移量的像素 public void onPageScrolled(int position, float positionOffset, int positionOffsetPixel) { } @Override public void onPageSelected(int position) { // 設置顯示滑動當前的位置改變 show_info.setText((position + 1) + "/" + adapter.getCount()); } } //數組文件 <?xml version="1.0" encoding="utf-8"?> <resources> <array name="img"> <item>@drawable/car0</item> <item>@drawable/car1</item> <item>@drawable/car2</item> <item>@drawable/car3</item> <item>@drawable/car4</item> <item>@drawable/car5</item> <item>@drawable/car6</item> <item>@drawable/car7</item> </array> </resources>