Universal-Image-Loader 加载网络图片 内存图片 SD卡图片.

来源:互联网 发布:人工智能pdf 编辑:程序博客网 时间:2024/04/17 05:30

使用Universal-Image-Loader加载图片

此第三方加载图片的优势:

  1. 多线程下载图片,图片可以来源于网络,文件系统,项目文件夹assets中以及drawable中等
  2. 支持随意的配置ImageLoader,例如线程池,图片下载器,内存缓存策略,硬盘缓存策略,图片显示选项以及其他的一些配置
  3. 支持图片的内存缓存,文件系统缓存或者SD卡缓存
  4. 支持图片下载过程的监听
  5. 根据控件(ImageView)的大小对Bitmap进行裁剪,减少Bitmap占用过多的内存
  6. 较好的控制图片的加载过程,例如暂停图片加载,重新开始加载图片,一般使用在ListView,GridView中,滑动过程中暂停加载图片,停止滑动的时候去加载图片
  7. 提供在较慢的网络下对图片进行加载
正文:

1.需要配置相应的jar包(jar包百度一搜就有).

2.在Application文件里复制以下代码:

//创建默认的ImageLoader配置参数   加载图片的库.ImageLoaderConfiguration configuration = ImageLoaderConfiguration.createDefault(this);ImageLoader.getInstance().init(configuration);
3.添加权限:

  1.     <uses-permission android:name="android.permission.INTERNET" />  
  2.     <!-- Include next permission if you want to allow UIL to cache images on SD card -->  
  3.     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
4.配置options

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