全面解析Android的开源图片框架Universal-Image-Loader

2019-12-10 18:34:04丽君

imageLoader.displayImage(imageUrl, mImageView, options, new SimpleImageLoadingListener(), new ImageLoadingProgressListener() { 
    
   @Override 
   public void onProgressUpdate(String imageUri, View view, int current, 
     int total) { 
     
   } 
  }); 

由于displayImage()方法中带ImageLoadingProgressListener参数的方法都有带ImageLoadingListener参数,所以我这里直接new 一个SimpleImageLoadingListener,然后我们就可以在回调方法onProgressUpdate()得到图片的加载进度。

加载其他来源的图片

使用Universal-Image-Loader框架不仅可以加载网络图片,还可以加载sd卡中的图片,Content provider等,使用也很简单,只是将图片的url稍加的改变下就行了,下面是加载文件系统的图片

//显示图片的配置 
  DisplayImageOptions options = new DisplayImageOptions.Builder() 
    .showImageOnLoading(R.drawable.ic_stub) 
    .showImageOnFail(R.drawable.ic_error) 
    .cacheInMemory(true) 
    .cacheOnDisk(true) 
    .bitmapConfig(Bitmap.Config.RGB_565) 
    .build(); 
   
  final ImageView mImageView = (ImageView) findViewById(R.id.image); 
  String imagePath = "/mnt/sdcard/image.png"; 
  String imageUrl = Scheme.FILE.wrap(imagePath); 
   
//  String imageUrl = "http://www.easck.com/uploads/201309/01/1378037235_7476.jpg"; 
   
  imageLoader.displayImage(imageUrl, mImageView, options); 

当然还有来源于Content provider,drawable,assets中,使用的时候也很简单,我们只需要给每个图片来源的地方加上Scheme包裹起来(Content provider除外),然后当做图片的url传递到imageLoader中,Universal-Image-Loader框架会根据不同的Scheme获取到输入流

//图片来源于Content provider 
  String contentprividerUrl = "content://media/external/audio/albumart/13"; 
   
  //图片来源于assets 
  String assetsUrl = Scheme.ASSETS.wrap("image.png"); 
   
  //图片来源于 
  String drawableUrl = Scheme.DRAWABLE.wrap("R.drawable.image");