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

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

传入图片的url和ImageLoaderListener, 在回调方法onLoadingComplete()中将loadedImage设置到ImageView上面就行了,如果你觉得传入ImageLoaderListener太复杂了,我们可以使用SimpleImageLoadingListener类,该类提供了ImageLoaderListener接口方法的空实现,使用的是缺省适配器模式

final ImageView mImageView = (ImageView) findViewById(R.id.image); 
  String imageUrl = "https://www.easck.com/-55osAWw3x0Q/URquUtcFr5I/AAAAAAAAAbs/rWlj1RUKrYI/s1024/A%252520Photographer.jpg"; 
   
  ImageLoader.getInstance().loadImage(imageUrl, new SimpleImageLoadingListener(){ 
 
   @Override 
   public void onLoadingComplete(String imageUri, View view, 
     Bitmap loadedImage) { 
    super.onLoadingComplete(imageUri, view, loadedImage); 
    mImageView.setImageBitmap(loadedImage); 
   } 
    
  }); 

如果我们要指定图片的大小该怎么办呢,这也好办,初始化一个ImageSize对象,指定图片的宽和高,代码如下

final ImageView mImageView = (ImageView) findViewById(R.id.image); 
  String imageUrl = "https://www.easck.com/-55osAWw3x0Q/URquUtcFr5I/AAAAAAAAAbs/rWlj1RUKrYI/s1024/A%252520Photographer.jpg"; 
   
  ImageSize mImageSize = new ImageSize(100, 100); 
   
  ImageLoader.getInstance().loadImage(imageUrl, mImageSize, new SimpleImageLoadingListener(){ 
 
   @Override 
   public void onLoadingComplete(String imageUri, View view, 
     Bitmap loadedImage) { 
    super.onLoadingComplete(imageUri, view, loadedImage); 
    mImageView.setImageBitmap(loadedImage); 
   } 
    
  }); 

上面只是很简单的使用ImageLoader来加载网络图片,在实际的开发中,我们并不会这么使用,那我们平常会怎么使用呢?我们会用到DisplayImageOptions,他可以配置一些图片显示的选项,比如图片在加载中ImageView显示的图片,是否需要使用内存缓存,是否需要使用文件缓存等等,可供我们选择的配置如下

DisplayImageOptions options = new DisplayImageOptions.Builder() 
  .showImageOnLoading(R.drawable.ic_stub) // resource or drawable 
  .showImageForEmptyUri(R.drawable.ic_empty) // resource or drawable 
  .showImageOnFail(R.drawable.ic_error) // resource or drawable 
  .resetViewBeforeLoading(false) // default 
  .delayBeforeLoading(1000) 
  .cacheInMemory(false) // default 
  .cacheOnDisk(false) // default 
  .preProcessor(...) 
  .postProcessor(...) 
  .extraForDownloader(...) 
  .considerExifParams(false) // default 
  .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default 
  .bitmapConfig(Bitmap.Config.ARGB_8888) // default 
  .decodingOptions(...) 
  .displayer(new SimpleBitmapDisplayer()) // default 
  .handler(new Handler()) // default 
  .build();