ViewPager在項目中會經常用到,但是有時候在加載大圖片的時候會引起內存溢出,接下來介紹一種方式,是的viewpager在加載圖片
的時候可以有效的避免內存溢出
主要是在Viewpager的適配器中做處理,使得適配器只加載3張圖片,大於3張圖片就將多余的圖片銷毀
關鍵代碼如下:
1 private class MyAdapter extends PagerAdapter { 2 3 @Override 4 public int getCount() { 5 return details_counts; 6 } 7 8 /** 9 * 在此方法中加載GifView 10 * 其原理就是保持2-3個緩存view 11 */ 12 @Override 13 public Object instantiateItem(View view, int position) { 14 ViewPager vp = ((ViewPager) view); 15 ImageView mGifView = new ImageView(PalmShowNewCarShowCarPicture.this); 16 if((xinglu_counts+position)<carDetailAddress.size()){ 17 18 Bitmap bit=loadImageFromLocal(carDetailAddress.get(xinglu_counts+position)); 19 mGifView.setImageBitmap(bit); 20 } 21 22 vp.addView(mGifView); 23 return mGifView; 24 } 25 26 /** 27 * 再次處理銷毀GifView 28 */ 29 @Override 30 public void destroyItem(View arg0, int arg1, Object arg2) {((ViewPager) arg0).removeView((View) arg2); 31 // ((GifView)arg2).destroy(); 32 Log.d("ViewPager", "-<<銷毀"+arg1+"頁"); 33 } 34 35 @Override 36 public boolean isViewFromObject(View arg0, Object arg1) { 37 return arg0 == arg1; 38 } 39 40 @Override 41 public void restoreState(Parcelable arg0, ClassLoader arg1) { 42 43 } 44 45 @Override 46 public Parcelable saveState() { 47 return null; 48 } 49 50 @Override 51 public void startUpdate(View arg0) { 52 53 } 54 55 @Override 56 public void finishUpdate(View arg0) { 57 58 } 59 } 60 61 62 public Bitmap loadImageFromLocal(String path) { 63 64 return BitmapFactory.decodeFile(path); 65 66 }
這樣就可以有效的避免內存溢出哦~~~