ImageLoader图片异步加载详解

来源:互联网 发布:unity3d和虚幻4 比较 编辑:程序博客网 时间:2024/06/05 00:09
一.简介
多线程下载图片,图片可以来源于网络,文件系统,项目文件夹assets中以及drawable中等
支持随意的配置ImageLoader,例如线程池,图片下载器,内存缓存策略,硬盘缓存策略,图片显示选项以及其他的一些配置
支持图片的内存缓存,文件系统缓存或者SD卡缓存
支持图片下载过程的监听
根据控件(ImageView)的大小对Bitmap进行裁剪,减少Bitmap占用过多的内存
较好的控制图片的加载过程,例如暂停图片加载,重新开始加载图片,一般使用在ListView,GridView中,滑动过程中暂停加载图片,停止滑动的时候去加载图片
提供在较慢的网络下对图片进行加载
二.代码实现

1.项目清单文件设置

<uses-permission android:name="android.permission.INTERNET"></uses-permission>  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>  <uses-permission android:name="android.permission.MOUNT_FORMAT_FILESYSTEMS"></uses-permission>//删除缓存图片  <application          android:name=".MyApp">

2.build.gradle中

compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5' 
3.在MyApp中
  3.1存入SD卡

public class MyApp extends Application{      @Override      public void onCreate() {          super.onCreate();          //得到地址存入图片          String path = Environment.getExternalStorageDirectory().getPath() + "/image";          File file = new File(path);            ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this)                  .memoryCacheExtraOptions(200, 200)//配置内存缓存图片的尺寸                  .memoryCacheSize(2 * 1024 * 1024)//配置内存缓存的大小                  .threadPoolSize(3)//配置加载图片的线程数                  .threadPriority(1000)//配置线程的优先级                  .diskCache(new UnlimitedDiskCache(file))//UnlimitedDiskCache 限制这个图片的缓存路径                  .diskCacheFileCount(50)//配置sdcard缓存文件的数量                  .diskCacheFileNameGenerator(new Md5FileNameGenerator())//MD5这种方式生成缓存文件的名字                  .diskCacheSize(50 * 1024 * 1024)//在sdcard缓存50MB                  .build();//完成            ImageLoader.getInstance().init(config);      }  }  

3.2在另一个类中引用

DisplayImageOptions options = new DisplayImageOptions.Builder()                  .showImageOnLoading(R.mipmap.ic_launcher)            //加载图片时的图片                  .showImageOnFail(R.mipmap.ic_launcher)              //加载失败时的图片                  .cacheInMemory(true)                               //启用内存缓存                  .displayer(new RoundedBitmapDisplayer(20))         //设置显示风格这里是圆角矩形                  .cacheInMemory(true)//让图片进行内存缓存                  .cacheOnDisk(true)//让图片进行sdcard缓存                  .build();                  ImageLoader.getInstance().displayImage(data.get(i).getImg(),holderOne.one_img,options); 

 4  .MyApp中

   4.1不存入SD卡
 
DisplayImageOptions options = new DisplayImageOptions.Builder()                  .showImageOnLoading(R.mipmap.ic_launcher)                  .displayer(new FadeInBitmapDisplayer(2000)).cacheOnDisk(true)                  .cacheInMemory(true).build();          ImageLoaderConfiguration configs = new ImageLoaderConfiguration.Builder(this)                  .defaultDisplayImageOptions(options).threadPoolSize(5)                  .build();            ImageLoader.getInstance().init(configs);
 4.2在另一个类中   

ImageLoader.getInstance().displayImage(data.get(i).getImg(),holderOne.one_img,options);

以上只是部分代码,其中(data.get(i).getImg()是获取的json中的数据)  








原创粉丝点击