下载地址https://github.com/nostra13/Android-Universal-Image-Loader
Android 1.5以上支持
每一个图片的加载和显示任务都运行在独立的线程中,除非这个图片缓存在内存中,这种情况下图片会立即显示。如果需要的图片缓存在本地,他们会开启一个独立的线程队列。如果在缓存中没有正确的图片,任务线程会从线程池中获取,因此,快速显示缓存图片时不会有明显的障碍。
需要的权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
获取缓存路径
File cacheDir = StorageUtils.getOwnCacheDirectory(getApplicationContext(), "imageloader/Cache"); //这个是你希望的缓存文件的目录:imageloader/Cache
File cacheDir = StorageUtils.getCacheDirectory(context);
ImageLoaderConfiguration的配置
1. File cacheDir = StorageUtils.getCacheDirectory(context);
2. ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
3. .memoryCacheExtraOptions(480, 800) // default = device screen dimensions 即保存的每个缓存文件的最大长宽
4. .diskCacheExtraOptions(480, 800, CompressFormat.JPEG, 75, null) //设置缓存的详细信息,最好不要设置这个
5. .taskExecutor(...)
6. .taskExecutorForCachedImages(...)
7. .threadPoolSize(3) // default 线程池设置1~5 避免OOM
8. .threadPriority(Thread.NORM_PRIORITY - 1) // default
9. .tasksProcessingOrder(QueueProcessingType.FIFO) // default
10. .denyCacheImageMultipleSizesInMemory()
11. .memoryCache(new LruMemoryCache(2 * 1024 * 1024))
12. .memoryCacheSize(2 * 1024 * 1024)
13. .memoryCacheSizePercentage(13) // default
14. .diskCache(new UnlimitedDiscCache(cacheDir)) // default 磁盘缓存路径
15. .diskCacheSize(50 * 1024 * 1024)
16. .diskCacheFileCount(100) //缓存的文件数量
17. .diskCacheFileNameGenerator(new HashCodeFileNameGenerator()) // defaultMd5FileNameGenerator() Md5加密
18. .imageDownloader(new BaseImageDownloader(context)) // default 下载超时
19. .imageDecoder(new BaseImageDecoder()) // default
20. .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default
21. .writeDebugLogs()
22. .build();
ImageLoader实例化
1. protected ImageLoader imageLoader = ImageLoader.getInstance();
DisplayImageOptions 设置
1. DisplayImageOptions options;
2. options = new DisplayImageOptions.Builder()
3. .showImageOnLoading(R.drawable.ic_launcher) //设置图片在下载期间显示的图片
4. .showImageForEmptyUri(R.drawable.ic_launcher)//设置图片Uri为空或是错误的时候显示的图片
5. .showImageOnFail(R.drawable.ic_launcher) //设置图片加载/解码过程中错误时候显示的图片
6. .cacheInMemory(true)//设置下载的图片是否缓存在内存中
7. .cacheOnDisc(true)//设置下载的图片是否缓存在SD卡中
8. .considerExifParams(true) //是否考虑JPEG图像EXIF参数(旋转,翻转)
9. .imageScaleType(ImageScaleType.EXACTLY_STRETCHED)//设置图片以如何的编码方式显示
10. .bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型//
11. .decodingOptions(android.graphics.BitmapFactory.Options decodingOptions)//设置图片的解码配置
12. //.delayBeforeLoading(int delayInMillis)//int delayInMillis为你设置的下载前的延迟时间
13. //设置图片加入缓存前,对bitmap进行设置
14. //.preProcessor(BitmapProcessor preProcessor)
15. .resetViewBeforeLoading(true)//设置图片在下载前是否重置,复位
16. .displayer(new RoundedBitmapDisplayer(20))//是否设置为圆角,弧度为多少
17. .displayer(new FadeInBitmapDisplayer(100))//是否图片加载好后渐入的动画时间
18. .build();//构建完成
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()正常显示一张图片
ImageLoader初始化(必须要的步骤,不如出错)
ImageLoader.getInstance().init(config);
用法
1 ImageLoader.getInstance().displayImage(imageUrl, imageView);
2 加载自定义配置的一个图片的
ImageLoader.getInstance().displayImage(imageUrl, imageView,options); // imageUrl代表图片的URL地址,imageView代表承载图片的IMAGEVIEW控件 , options代表DisplayImageOptions配置文件
3图片加载时候带加载情况的监听
4图片加载时候,带监听又带加载进度条的情况
加载其他来源的图片
使用类Scheme
String assetsUrl = Scheme.ASSETS.wrap("image.png");
String drawableUrl = Scheme.DRAWABLE.wrap("R.drawable.image");
String file= Scheme.FILE.warp("mnt/sdcard/image.png");
String contentprividerUrl = "content://media/external/audio/albumart/13";
GirdView,ListView加载图片
供了PauseOnScrollListener这个类来控制ListView,GridView滑动过程中停止去加载图片,该类使用的是代理模式
1. listView.setOnScrollListener(new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling));
2. gridView.setOnScrollListener(new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling));
第一个参数就是我们的图片加载对象ImageLoader, 第二个是控制是否在滑动过程中暂停加载图片,如果需要暂停传true就行了,第三个参数控制猛的滑动界面的时候图片是否加载
OutOfMemoryError
减少线程池中线程的个数,在ImageLoaderConfiguration中的(.threadPoolSize)中配置,推荐配置1-5
在DisplayImageOptions选项中配置bitmapConfig为Bitmap.Config.RGB_565,因为默认是ARGB_8888, 使用RGB_565会比使用ARGB_8888少消耗2倍的内存
在ImageLoaderConfiguration中配置图片的内存缓存为memoryCache(new WeakMemoryCache()) 或者不使用内存缓存
在DisplayImageOptions选项中设置.imageScaleType(ImageScaleType.IN_SAMPLE_INT)或者imageScaleType(ImageScaleType.EXACTLY)
来源:oschina
链接:https://my.oschina.net/u/1417500/blog/416047