ViewPager加载大量图片
2017-03-17 09:23
155 查看
比如说当我们加载100张图片的时候,我们创建100个Imageview,然后放入集合,这样做很容易内存溢出或者加载速度特别慢。我们可以滑动的时候去加载,滑动一张创建一个Imageview
直接上代码主要关注adapter的写法
package krelve.view; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.ImageView; import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; import com.nostra13.universalimageloader.core.assist.QueueProcessingType; import java.util.ArrayList; import java.util.List; public class Kanner extends FrameLayout { private int count; private String[] imagesUrls; private ImageLoader mImageLoader; private List<ImageView> imageViews; private Context context; private ViewPager vp; private int postion; private DisplayImageOptions options; public Kanner(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); this.context = context; initImageLoader(context); initData(); } public Kanner(Context context, AttributeSet attrs) { this(context, attrs, 0); } public Kanner(Context context) { this(context, null); } private void initData() { imageViews = new ArrayList<ImageView>(); } public void setImagesUrl(String[] imagesUrl,int postion) { this.postion = postion; initLayout(); initImgFromNet(imagesUrl); showTime(); } private void initLayout() { imageViews.clear(); View view = LayoutInflater.from(context).inflate(R.layout.kanner_layout, this, true); vp = (ViewPager) view.findViewById(R.id.vp); } private void initImgFromNet(String[] imagesUrl) { imagesUrls = imagesUrl; count = imagesUrl.length; // 添加事件监听 initListener(); } private void initListener() { vp.setOnPageChangeListener(new OnPageChangeListener() { boolean isScrolled = false; @Override public void onPageScrollStateChanged(int status) { switch (status) { case 1:// 手势滑动 isScrolled = false; break; case 2:// 界面切换 isScrolled = true; break; case 0:// 滑动结束 // 当前为最后一张,此时从右向左滑,则切换到第一张 if (vp.getCurrentItem() == vp.getAdapter().getCount() - 1 && !isScrolled) { vp.setCurrentItem(0); } // 当前为第一张,此时从左向右滑,则切换到最后一张 else if (vp.getCurrentItem() == 0 && !isScrolled) { vp.setCurrentItem(vp.getAdapter().getCount() - 1); } break; } } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageSelected(int index) { } }); } private void showTime() { vp.setAdapter(new KannerPagerAdapter()); vp.setCurrentItem(postion); } public void initImageLoader(Context context) { ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder( context).threadPriority(Thread.NORM_PRIORITY - 2) .denyCacheImageMultipleSizesInMemory() .diskCacheFileNameGenerator(new Md5FileNameGenerator()) .tasksProcessingOrder(QueueProcessingType.LIFO) .writeDebugLogs().build(); ImageLoader.getInstance().init(config); options = new DisplayImageOptions.Builder() .cacheInMemory(true) .cacheOnDisk(true) .build(); mImageLoader = ImageLoader.getInstance(); } class KannerPagerAdapter extends PagerAdapter { @Override public int getCount() { return imagesUrls.length; } @Override public int getItemPosition(Object object) { if (object != null && imagesUrls != null) { String resId = (String)((ImageView)object).getTag(); if (resId != null) { for (int i = 0; i < imagesUrls.length; i++) { if (resId.equals(imagesUrls[i])) { return i; } } } } return POSITION_NONE; } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } @Override public Object instantiateItem(ViewGroup container, int position) { if (imagesUrls != null && position < imagesUrls.length) { String resId = imagesUrls[position]; if (resId != null) { ImageView itemView = new ImageView(context); itemView.setScaleType(ImageView.ScaleType.FIT_XY); BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize = 4; Bitmap bm = BitmapFactory.decodeFile(resId, options); itemView.setImageBitmap(bm); itemView.setTag(resId); ((ViewPager) container).addView(itemView); return itemView; } } return null; } @Override public void destroyItem(ViewGroup container, int position, Object object) { if (object != null) { ViewGroup viewPager = ((ViewGroup) container); int count = viewPager.getChildCount(); for (int i = 0; i < count; i++) { View childView = viewPager.getChildAt(i); if (childView == object) { viewPager.removeView(childView); break; } } } } } }
相关文章推荐
- 安卓Viewpager加载大量图片的时候卡顿
- android 解决ViewPager加载大量图片内存溢出问题
- android 解决ViewPager加载大量图片内存溢出问题
- Viewpager加载大量图片的时候卡顿
- Viewpager图片自动轮播,网络图片加载,图片自动刷新
- 关于Viewpager加载网络图片显示不全
- 基于ViewPager实现大量图片浏览功能
- ViewPager或ImgeView加载图片出现内存溢出(OOM)
- ViewPager+动态加载网络图片
- ViewPager不显示加载的图片或者报错
- ViewPager + Volley 异步多线程图片加载实现Banner效果
- ListView GridView ViewPager 异步 加载网络图片 缓存到本地
- Android:ViewPager详解(异步网络加载图片,带图片缓存,并带导航小圆点)
- 使用universalimageloader实现viewpager加载网络图片轮显
- ViewPager实现加载网络图片,动态添加删除效果
- 基于ViewPager实现大量图片浏览功能
- 基于ViewPager实现大量图片浏览功能
- 基于ViewPager实现大量图片浏览功能
- Universal-Image-Loader解析(三)——用ListView和ViewPager加载网络中的图片