开源图片加载库universal-image-loader使用

库地址:

了解库的结构和可以调用的方法
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(imageUriimageView);//只需图片路径和要显示图片的控件
imageLoader.loadImage(imageUrinew 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(imageUrlimageViewoptionsnew 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(imageUrlimageViewoptions
        , new ImageLoadingListener() {。。。} new  ImageLoadingProgressListener() {
            @Override
            public void onProgressUpdate(String imageUri, View viewint currentint 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(); 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

繁星点点-

请我喝杯咖啡呗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值