Universal-Image-Loader的使用

不羁岁月 提交于 2019-12-03 19:36:49

下载地址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(480800// default = device screen dimensions  即保存的每个缓存文件的最大长宽  

4.           .diskCacheExtraOptions(480800, CompressFormat.JPEG, 75null)  //设置缓存的详细信息,最好不要设置这个 

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

              RoundedBitmapDisplayerint roundPixels)设置圆角图片

              FakeBitmapDisplayer()这个类什么都没做

              FadeInBitmapDisplayerint durationMillis)设置图片渐显的时间

         SimpleBitmapDisplayer()正常显示一张图片 

 

ImageLoader初始化(必须要的步骤,不如出错)

ImageLoader.getInstance().init(config);

 

用法

1 ImageLoader.getInstance().displayImage(imageUrl, imageView);

加载自定义配置的一个图片的

ImageLoader.getInstance().displayImage(imageUrl, imageViewoptions); // 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选项中配置bitmapConfigBitmap.Config.RGB_565,因为默认是ARGB_8888 使用RGB_565会比使用ARGB_8888少消耗2倍的内存

  • ImageLoaderConfiguration中配置图片的内存缓存为memoryCache(new      WeakMemoryCache()) 或者不使用内存缓存

  • DisplayImageOptions选项中设置.imageScaleType(ImageScaleType.IN_SAMPLE_INT)或者imageScaleType(ImageScaleType.EXACTLY)



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!