使用Universal-Image-Loader加载图片
此第三方加载图片的优势:
- 多线程下载图片,图片可以来源于网络,文件系统,项目文件夹assets中以及drawable中等
- 支持随意的配置ImageLoader,例如线程池,图片下载器,内存缓存策略,硬盘缓存策略,图片显示选项以及其他的一些配置
- 支持图片的内存缓存,文件系统缓存或者SD卡缓存
- 支持图片下载过程的监听
- 根据控件(ImageView)的大小对Bitmap进行裁剪,减少Bitmap占用过多的内存
- 较好的控制图片的加载过程,例如暂停图片加载,重新开始加载图片,一般使用在ListView,GridView中,滑动过程中暂停加载图片,停止滑动的时候去加载图片
- 提供在较慢的网络下对图片进行加载
1.需要配置相应的jar包(jar包百度一搜就有).
2.在Application文件里复制以下代码:
//创建默认的ImageLoader配置参数 加载图片的库. ImageLoaderConfiguration configuration = ImageLoaderConfiguration.createDefault(this); ImageLoader.getInstance().init(configuration);3.添加权限:
- <uses-permission android:name="android.permission.INTERNET" />
- <!-- Include next permission if you want to allow UIL to cache images on SD card -->
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
DisplayImageOptions options = new DisplayImageOptions.Builder() .cacheInMemory(true)//是否缓存在内存中. .cacheOnDisk(true)//是否保存在SD卡中. .resetViewBeforeLoading(true)//接下来三行代码最好有,不然用在listview会有复用问题. .displayer(new SimpleBitmapDisplayer()) .handler(new Handler()) .build();5.加载图片代码.
ImageLoader.getInstance().displayImage(list.get(position - 1), datas.get(position - 1), options, new ImageLoadingListener() {//第一个参数为图片地址,第二个为控件ID. @Override public void onLoadingStarted(String s, View view) { } @Override public void onLoadingFailed(String s, View view, FailReason failReason) { } @Override public void onLoadingComplete(String s, View view, Bitmap bitmap) { datas.get(position - 1).setImageBitmap(bitmap);//在此设置相应逻辑 progressBar.setVisibility(View.GONE);//关闭加载进度条. } @Override public void onLoadingCancelled(String s, View view) { } }, new ImageLoadingProgressListener() { @Override public void onProgressUpdate(String s, View view, int i, int i1) { progressBar.setVisibility(View.VISIBLE);//开启加载进度条. } });6.参考文章地址(此文更详细)
http://blog.csdn.net/xiaanming/article/details/26810303/
7.在listview中出现复用问题参考文章(主要是68楼的哥们的意见)
http://www.eoeandroid.com/thread-541113-5-1.html