ImageLoader图片异步加载详解

介绍了一个多线程图片加载框架的配置与使用方法,包括内存和磁盘缓存策略、线程池配置、图片显示选项及监听等功能,并提供了具体代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.简介
多线程下载图片,图片可以来源于网络,文件系统,项目文件夹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中的数据)  








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值