库地址:
了解库的结构和可以调用的方法
ImageLoader |
| - init(ImageLoaderConfiguration)
| - isInited()
| - displayImage(...)
| - loadImage(...)
| - loadImageSync(...)
| - getMemoryCache()
| - clearMemoryCache()
| - getDiskCache()
| - clearDiskCache()
| - denyNetworkDownloads(boolean)
| - handleSlowNetwork(boolean)
| - setDefaultLoadingListener(...)
| - pause()
| - resume()
| - stop()
| - destroy()
| - getLoadingUriForView(ImageView)
| - cancelDisplayTask(ImageView)
ImageAware |
| - getId()
| - getWidth()
| - getHeight()
| - getScaleType()
| - getWrappedView()
| - isCollected()
| - setImageDrawable(Drawable)
| - setImageBitmap(Bitmap)
MemoryCacheUtil |
| - findCachedBitmapsForImageUri(...)
| - findCacheKeysForImageUri(...)
| - removeFromCache(...)
DiskCacheUtil |
| - findInCache(...)
| - removeFromCache(...)
StorageUtils |
| - getCacheDirectory(Context)
| - getIndividualCacheDirectory(Context)
| - getOwnCacheDirectory(Context, String)
ImageScaleType | NONE
| IN_SAMPLE_POWER_OF_2
| IN_SAMPLE_INT
| EXACTLY
| EXACTLY_STRETCHED
QueueProcessingType | FIFO
| LIFO
FailReason.FailType | IO_ERROR
| DECODING_ERROR
| NETWORK_DENIED
| OUT_OF_MEMORY
| UNKNOWN
ImageLoadingListener |
| | - onLoadingStarted(String, View)
| | - onLoadingFailed(String, View, FailReason)
| | - onLoadingComplete(String, View, Bitmap)
| | - onLoadingCancelled(String, View)
|---- SimpleImageLoadingListener
ImageDownloader
|---- BaseImageDownloader
|---- NetworkDeniedImageDownloader
|---- SlowNetworkImageDownloader
ImageDecoder
|---- BaseImageDecoder
BitmapDisplayer
|---- SimpleBitmapDisplayer
|---- FadeInBitmapDisplayer
|---- RoundedBitmapDisplayer
|---- RoundedVignetteBitmapDisplayer
DiskCache
|---- BaseDiscCache
|---- UnlimitedDiscCache
|---- LruDiskCache
|---- LimitedAgeDiscCache
MemoryCacheAware
|---- BaseMemoryCache
| |---- WeakMemoryCache
| |---- LimitedMemoryCache
| |---- UsingFreqLimitedMemoryCache
| |---- LRULimitedMemoryCache
| |---- LargestLimitedMemoryCache
| |---- FIFOLimitedMemoryCache
|---- LimitedAgeMemoryCache
|---- LruMemoryCache
FileNameGenerator
|---- HashCodeFileNameGenerator
|---- Md5FileNameGenerator
PauseOnScrollListener
加载流程:
可以接收的图片URI格式:
//注意最好是使用ImageView.setImageResource(...)加載本地圖片,而不是使用drawable://
String imageUrl = "http://site.com/image.png" ;// from Web
String uri2 = "file:///mnt/sdcard/image.png" ;// from SD card
String uri3 = "file:///mnt/sdcard/video.mp4" ;// from SD card (video thumbnail)
String uri4 = "content://media/external/images/media/13"; // from content provider
String uri5 = "content://media/external/video/media/13"; // from content provider (video thumbnail)
String uri6 = "assets://image.png"; // from assets
String uri7 = "drawable://" + R.drawable.ic_launcher ;// from drawables (non-9patch images)
使用步骤:
设置全局配置 ImageLoaderConfiguration 对象,只需设置一次。也可以使用默认配置。
创建配置对象:
ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(getApplicationContext())
.memoryCacheExtraOptions(480, 800) //保存的每个缓存文件的最大长宽
.diskCacheExtraOptions(480, 800, null)
// .taskExecutor(...)
// .taskExecutorForCachedImages(...)
.threadPoolSize(3) // 线程池内加载的数量
.threadPriority(Thread.NORM_PRIORITY - 2) // default
.tasksProcessingOrder(QueueProcessingType.FIFO) // 任務執行順序
.denyCacheImageMultipleSizesInMemory()
.memoryCache(new LruMemoryCache(2 * 1024 * 1024))//你可以通过自己的内存缓存实现
.memoryCacheSize(2 * 1024 * 1024)
.memoryCacheSizePercentage(13) // default
.diskCache(new UnlimitedDiskCache(cacheDir)) //自定义缓存路径
.diskCacheSize(50 * 1024 * 1024)
.diskCacheFileCount(100)
// diskCacheFileNameGenerator 将缓存下来的文件以什么方式命名
// 1、new HashCodeFileNameGenerator()//使用HASHCODE对UIL进行加密命名
// 2、new Md5FileNameGenerator() //使用MD5对UIL进行加密命名
.diskCacheFileNameGenerator(new HashCodeFileNameGenerator()) // default
.imageDownloader(new BaseImageDownloader(getApplicationContext())) // default
.imageDecoder(new BaseImageDecoder(true)) // default
.defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default
.writeDebugLogs()
.build();
使用ImageLoader 的 init方法设置图片加载参数:
ImageLoader.getInstance().init(
configuration
);
创建显示设置对象:
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.ic_launcher) //设置图片在下载期间显示的图片
.showImageForEmptyUri(R.drawable.ic_launcher)//设置图片Uri为空或是错误的时候显示的图片
.showImageOnFail(R.drawable.ic_launcher) //设置图片加载/解码过程中错误时候显示的图片
.cacheInMemory(true)//设置下载的图片是否缓存在内存中
.cacheOnDisc(true)//设置下载的图片是否缓存在SD卡中
.considerExifParams(true) //是否考虑JPEG图像EXIF参数(旋转,翻转)
.imageScaleType(ImageScaleType.EXACTLY_STRETCHED)//设置图片以如何的编码方式显示
.bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型
.delayBeforeLoading(int delayInMillis)//int delayInMillis为你设置的下载前的延迟时间
//设置图片加入缓存前,对bitmap进行设置
.preProcessor(BitmapProcessor preProcessor)
.resetViewBeforeLoading(true)//设置图片在下载前是否重置,复位
.displayer(new RoundedBitmapDisplayer(20))//是否设置为圆角,弧度为多少
.displayer(new FadeInBitmapDisplayer(100))//是否图片加载好后渐入的动画时间
.build();//构建完成
1).imageScaleType(ImageScaleType imageScaleType) 是设置图片的缩放方式
缩放类型mageScaleType:
EXACTLY :图像将完全按比例缩小的目标大小
EXACTLY_STRETCHED:图片会缩放到目标大小完全
IN_SAMPLE_INT:图像将被二次采样的整数倍
IN_SAMPLE_POWER_OF_2:图片将降低2倍,直到下一减少步骤,使图像更小的目标大小
NONE:图片不会调整
2).displayer(BitmapDisplayer displayer)是设置图片的显示方式
显示方式displayer:
RoundedBitmapDisplayer(int roundPixels)设置圆角图片
FakeBitmapDisplayer()这个类什么都没做
FadeInBitmapDisplayer(int durationMillis)设置图片渐显的时间
SimpleBitmapDisplayer()正常显示一张图片
最简单的使用方式(使用默认config和option):
ImageLoader imageLoader = ImageLoader.getInstance();
imageLoader.displayImage(imageUri, imageView);//只需图片路径和要显示图片的控件
imageLoader.loadImage(imageUri, new SimpleImageLoadingListener() {
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
// Do whatever you want with Bitmap
}
});
//从路径获取图片,并转换成Bitmap
Bitmap bmp = imageLoader.loadImageSync(imageUri);
使用自定义option和增加事件监听:在前面创建了DisplayImageOptions 对象之后就可以作为参数传入加载的方法里面,也可以为图片加载添加事件监听。
ImageLoader.getInstance().displayImage(imageUrl, imageView, options, new ImageLoadingListener() {
@Override
public void onLoadingStarted(String arg0, View arg1) {
//开始加载的时候执行
}
@Override
public void onLoadingFailed(String arg0, View arg1, FailReason arg2) {
//加载失败的时候执行
}
@Override
public void onLoadingComplete(String arg0, View arg1, Bitmap arg2) {
//加载成功的时候执行
}
@Override
public void onLoadingCancelled(String arg0, View arg1) {
//加载取消的时候执行
}
});
// 带监听又带加载进度监听
ImageLoader.getInstance().displayImage(imageUrl, imageView, options
, new ImageLoadingListener() {。。。}
,
new
ImageLoadingProgressListener() {
@Override
public void onProgressUpdate(String imageUri, View view, int current, int total) {
// 在这里更新 ProgressBar的进度信息
}
});
注意:
1.上述提到的2个权限必须加入,否则会出错
2.ImageLoaderConfiguration必须配置并且全局化的初始化这个配置ImageLoader.getInstance().init(config); 否则也会出现错误提示
3.ImageLoader是根据ImageView的height,width确定图片的宽高。
4.如果经常出现OOM(别人那边看到的,觉得很有提的必要)
①减少配置之中线程池的大小,(.threadPoolSize).推荐1-5;
②使用.bitmapConfig(Bitmap.config.RGB_565)代替ARGB_8888;
③使用.imageScaleType(ImageScaleType.IN_SAMPLE_INT)或者 try.imageScaleType(ImageScaleType.EXACTLY);
④避免使用RoundedBitmapDisplayer.他会创建新的ARGB_8888格式的Bitmap对象;
⑤使用.memoryCache(new WeakMemoryCache()),不要使用.cacheInMemory();