universal-image-loader的使用及介绍
2017-09-14 14:32
309 查看
参考:
Android Universal Image Loader 源码分析Android-Universal-Image-Loader的GitHub地址
ImageLoader中相关配置详解
使用:
1、依赖:compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
2、权限
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
3、Application中配置ImageLoaderConfiguration参数
//配置一:默认 ImageLoader.getInstance().init(ImageLoaderConfiguration.createDefault(this)); //配置二:自定义 File cacheDir = StorageUtils.getCacheDirectory(context); //缓存文件夹路径 //File cacheDir = StorageUtils.getCacheDirectory(getApplicationContext());//默认 //File cacheDir = StorageUtils.getOwnCacheDirectory(this, "imageloader/Cache"); ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context) .memoryCacheExtraOptions(480, 800) // default = device screen dimensions 内存缓存文件的最大长宽 .diskCacheExtraOptions(480, 800, null) // 本地缓存的详细信息(缓存的最大长宽),最好不要设置这个 .taskExecutor(...) .taskExecutorForCachedImages(...) .threadPoolSize(3) // default 线程池内加载的数量 .threadPriority(Thread.NORM_PRIORITY - 2) // default 设置当前线程的优先级 .tasksProcessingOrder(QueueProcessingType.FIFO) // default FIFO,线程池的线程队列类型。目前只有 FIFO, LIFO 两种可供选择。 .denyCacheImageMultipleSizesInMemory() .memoryCache(new LruMemoryCache(2 * 1024 * 1024)) //可以通过自己的内存缓存实现 .memoryCacheSize(2 * 1024 * 1024) // 内存缓存的最大值 .memoryCacheSizePercentage(13) // default .diskCache(new UnlimitedDiscCache(cacheDir)) // default 可以自定义缓存路径 .diskCacheSize(50 * 1024 * 1024) // 50 Mb sd卡(本地)缓存的最大值 .diskCacheFileCount(100) // 可以缓存的文件数量 // default为使用HASHCODE对UIL进行加密命名, 还可以用MD5(new Md5FileNameGenerator())加密 .diskCacheFileNameGenerator(new HashCodeFileNameGenerator()) .imageDownloader(new BaseImageDownloader(context)) // default .imageDecoder(new BaseImageDecoder()) // default .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default .discCache(new LimitedAgeDiscCache(cacheDir, 7 * 24 * 60 * 60)) // 自定义缓存路径,7天后自动清除缓存 .writeDebugLogs() // 打印debug log .build(); //开始构建 ImageLoader imageLoader = ImageLoader.getInstance(); if (!imageLoader.isInited()) {//避免多次配置 imageLoader.init(config); }
4、要显示图片的地方配置DisplayImageOptions参数
DisplayImageOptions options = new DisplayImageOptions.Builder() //加载图片时的图片 .showImageOnLoading(R.drawable.ic_stub) //没有图片资源时的默认图片 .showImageForEmptyUri(R.drawable.ic_empty) //加载失败时的图片 .showImageOnFail(R.drawable.ic_error) //启用内存缓存,默认false .cacheInMemory(true) //启用外存缓存,默认false .cacheOnDisk(true) //是否考虑JPEG图像EXIF参数(旋转,翻转)启用EXIF和JPEG图像格式,默认false,// 会识别图片的方向信息 .considerExifParams(true) //设置显示风格这里是圆角矩形,默认SimpleBitmapDisplayer //设置图片的显示方式: // RoundedBitmapDisplayer(int roundPixels)设置圆角图片 // FakeBitmapDisplayer()这个类什么都没做 // FadeInBitmapDisplayer(int durationMillis)设置图片渐显的时间 // SimpleBitmapDisplayer()正常显示一张图片 .displayer(new RoundedBitmapDisplayer(30)) //默认是ARGB_8888, 使用RGB_565会比使用ARGB_8888少消耗2倍的内存 .bitmapConfig(Bitmap.Config.RGB_565) // default false //设置图片在下载前是否重置,复位,//在ImageView显示图片之前先清空已有的图片内容 .resetViewBeforeLoading(false) .delayBeforeLoading(1000)//下载前的延迟时间 //设置图片的缩放方式: // EXACTLY :图像将完全按比例缩小的目标大小 // EXACTLY_STRETCHED:图片会缩放到目标大小完全 // IN_SAMPLE_INT:图像将被二次采样的整数倍 // IN_SAMPLE_POWER_OF_2:图片将降低2倍,直到下一减少步骤,使图像更小的目标大小 // NONE:图片不会调整 .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default .handler(new Handler()) // default .build(); //displayImage:异步加载并显示图片 ImageLoader.getInstance().displayImage(url,imagview,options);
注意:url可以是网络、SD卡、assets、drawable,如下:
String url = "http://sd.daicash.cn/data/avatar/f1a7eb0aa2f4dad6136f6c5b50c6f4ee/a_1501_1.jpg";// from Web String url = "file:///mnt/sdcard/image.png"; // from SD card String url = "assets://image.png"; // from assets String url = "drawable://" + R.drawable.image; // from drawables(only images, non-9patch) String url = "content://media/external/audio/albumart/13"; //from content provider
ImageLoader 加载图片主要分为三类接口:
displayImage(…) 表示异步加载并显示图片到对应的ImageAware上。 loadImage(…) 表示异步加载图片并执行回调接口。 loadImageSync(…) 表示同步加载图片。
参数介绍:
uri: 图片的 uri。uri 支持多种来源的图片,包括 http、https、file、content、assets、drawable 及自定义。
imageAware: 一个接口,表示需要加载图片的对象,可包装 View。
options: 图片显示的配置项。比如加载前、加载中、加载失败应该显示的占位图片,图片是否需要在磁盘缓存,是否需要在内存缓存等。
ImageLoadingListener: 图片加载各种时刻的回调接口,包括开始加载、加载失败、加载成功、取消加载四个时刻的回调函数。
ImageLoadingProgressListener: 图片加载进度的回调接口。
示例:
imageLoader.loadImage(url, new ImageSize(35, 35), options, new ImageLoadingListener() { @Override public void onLoadingStarted(String imageUri, View view) { } @Override public void onLoadingFailed(String imageUri, View view, FailReason failReason) { } @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { } @Override public void onLoadingCancelled(String imageUri, View view) { } }, new ImageLoadingProgressListener() { @Override public void onProgressUpdate(String imageUri, View view, int current, int total) { } });
5、在需要清除缓存的地方可以清除缓存
ImageLoader.getInstance().clearMemoryCache(); // 清除内存缓存 ImageLoader.getInstance().clearDiskCache(); // 清除本地文件缓存
6、设置滚动是否加载
//Universal-Image-Loader提供了PauseOnScrollListener这个类来控制ListView,GridView滑动过程中停止去加载图片。 // 第一个参数就是我们的图片加载对象ImageLoader, // 第二个参数控制是否在滑动过程中暂停加载图片,如果需要暂停传true就行了, // 第三个参数控制猛的滑动界面的时候图片是否加载图片,如果需要暂停传true就行了, listView.setOnScrollListener(new PauseOnScrollListener(ImageLoader.getInstance(), true, true));
关于缓存:
内存缓存默认是:LruMemoryCache,磁盘缓存默认是:UnlimitedDiscCache。
磁盘缓存文件名默认生成方式:HashCodeFileNameGenerator
1、 内存缓存:相关类继承关系及介绍
MemoryCache:内存缓存的接口,里面定义了内存缓存的先关操作, 比如:读取一个缓存,放入一个缓存,移除一个缓存,清空缓存 LruMemoryCache:框架默认,lru算法,强引用 LimitedAgeMemoryCache:超出时间则删除,强引用 FuzzyKeyMemoryCache:同一个图片新的尺寸会覆盖缓存中该图片老的尺寸。 BaseMemoryCache:以强或弱引用的方式保存bitmap,便于虚拟机在内存不足时回收缓存对象。 WeakMemoryCache:弱引用 LimitedMemoryCache:强或弱引用,限制存储容量的内存缓存策略, 最大容量为16M,未超出容量强引用,超出容量软引用 FIFOLimitedMemoryCache:先进先出的缓存策略,当超过缓存限定值, 先删除最先加入缓存的bitmap LRULimitedMemoryCache:lru算法,弱引用,当超过缓存限定值, 先删除最近最少使用的bitmap LargestLimitedMemoryCache:当超过缓存限定值, 先删除最大的bitmap UsingFreqLimitedMemoryCache:当超过缓存限定值, 先删除使用次数最少的bitmap
2、硬盘缓存:相关类继承关系及介绍
DiskCache LruDiskCache:lru算法,默认缓存大小32kb,超出容量则删除最近最少使用。 BaseDiskCache:默认缓存大小32kb LimitedAgeDiskCache:设定文件存活的最长时间,当超过这个值,就删除该文件 UnlimitedDiskCache:这个缓存类没有时间限制,框架默认
3、 磁盘缓存文件名的生成:相关类继承关系及介绍
FileNameGenerator:在缓存文件时对文件名称的修改 HashCodeFileNameGenerator:该类负责获取文件名称的hashcode然后转换成字符串。默认 Md5FileNameGenerator:该类把源文件的名称通过md5加密后保存。
关于图片显示
相关类继承关系及介绍:BitmapDisplayer:在ImageAware中显示bitmap对象的接口。可在实现中对bitmap做一些额外处理,比如加圆角、动画效果。 CircleBitmapDisplayer: 显示原型图片在ImageAware中,实现了BitmapDisplayer接口。主要通过BitmapShader实现。 FadeInBitmapDisplayer: 图片淡入方式显示在ImageAware中,实现了BitmapDisplayer接口。 RoundedBitmapDisplayer: 为图片添加圆角显示在ImageAware中,实现了BitmapDisplayer接口。主要通过BitmapShader实现。 RoundedVignetteBitmapDisplayer: 为图片添加渐变效果的圆角显示在ImageAware中,实现了BitmapDisplayer接口,主要通过RadialGradient实现。 SimpleBitmapDisplayer: 直接将图片显示在ImageAware中,实现了BitmapDisplayer接口。
相关文章推荐
- Android 开源框架Universal-Image-Loader解析 基本介绍及使用
- Android开源框架Universal-Image-Loader基本介绍和使用
- Android ImageLoader(Android-Universal-Image-Loader)【1】概述及使用简单介绍
- Universal-Image-Loader的简单介绍和使用
- Android开源框架Universal-Image-Loader基本介绍及使用
- Universal-Image-Loader(UIL)图片加载框架使用简单介绍
- ImageLoader_ _Universal-Image-Loader完全解析(一)之介绍与使用详解
- Android开源框架Universal-Image-Loader基本介绍和使用
- ImageLoader_ _Universal-Image-Loader完全解析(一)之介绍与使用详解
- 【UIL框架】Universal-Image-Loader完全解析(一)之介绍与使用详解
- 【UIL框架】Universal-Image-Loader全然解析(一)之介绍与使用具体解释
- 封装项目整体架构,访问网络数据,展示列表数据,根据图片数量的不同来多条目加载,使用Universal-Image-Loader进行图片加载
- Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用
- Universal-Image-Loader使用(一)
- Android-Universal-Image-Loader三大组件DisplayImageOptions、ImageLoader、ImageLoaderConfiguration详解 一、介绍
- Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用
- Universal-Image-Loader完全解析(一)--- 基本介绍及使用
- Universal-Image-Loader的使用
- Android-Universal-Image-Loader 图片异步加载类库的使用(超详细配置)
- Universal-Image-Loader完全解析(一)--- 基本介绍及使用