android 图片网络下载github开源框架之Universal-Image-Loader

来源:互联网 发布:魔百和网络机顶盒 编辑:程序博客网 时间:2024/06/07 20:45

最近在做妙趣剪纸项目,剪纸应用项目链接。发扬传统文化,大家多多关注。
需要自己搭建服务器,我用的是新浪sae,简直秒杀京东云几条街,把图片放在网上下载,但是图片经常下载要遇到很多问题,包括oom等。所以研究了一下这个框架。
1.Universal-Image-Loader应用广泛,github地址
2.说说这个项目的优点:
(1)首先这个工具能够获取各个途径的图片,包括网络,文件,asserts,以及provider等。
(2)这个工具对网络下载进行了优化,能够自动实现内存和文件的缓存。
(3)这个工具能够对图片获取的全称进行监控跟踪。
3.这个工具怎么使用?
(1)首先github上面下载,然后把其中的jar包导入。
(2)写一个类实现Application,然后把application在manifest中的application标签中注册,由于application是单例,经常用来初始化一些变量。在oncreate()方法中,创建ImageLoader的配置参数,我们采取的是默认,只有设置了配置参数后才可以使用ImageLoader,不然会报错。只有yo代码如下:

public class MyApplication extends Application {      @Override      public void onCreate() {          super.onCreate();          ImageLoaderConfiguration configuration = ImageLoaderConfiguration                  .createDefault(this);          //Initialize ImageLoader with configuration.          ImageLoader.getInstance().init(configuration);      }  }  

(3)ImageLoader单例模式,有两个主要的方法displayImage(), loadImage(),。分别介绍如下:
loadImage()的相关代码:

final ImageView mImageView = (ImageView) findViewById(R.id.image);          String imageUrl = "https://lh6.googleusercontent.com/-55osAWw3x0Q/URquUtcFr5I/AAAAAAAAAbs/rWlj1RUKrYI/s1024/A%252520Photographer.jpg";          ImageSize mImageSize = new ImageSize(100, 100);          //显示图片的配置          DisplayImageOptions options = new DisplayImageOptions.Builder()                  .cacheInMemory(true)                  .cacheOnDisk(true)                  .bitmapConfig(Bitmap.Config.RGB_565)                  .build();          ImageLoader.getInstance().loadImage(imageUrl, mImageSize, options, new SimpleImageLoadingListener(){              @Override              public void onLoadingComplete(String imageUri, View view,                      Bitmap loadedImage) {                  super.onLoadingComplete(imageUri, view, loadedImage);                  mImageView.setImageBitmap(loadedImage);              }          });  

其中,ImageSize 这个用来在设置图片的饿大小。
DisplayImageOptions这个类用来对设置图片的加载,比如上例设置缓存在内存和文件中。
如果要对全称进行监控,最后一个参数可以实现ImageLoadingListener方法;代码如下:

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

displayImage()方法示例代码:

final ImageView mImageView = (ImageView) findViewById(R.id.image);          String imageUrl = "https://lh6.googleusercontent.com/-55osAWw3x0Q/URquUtcFr5I/AAAAAAAAAbs/rWlj1RUKrYI/s1024/A%252520Photographer.jpg";          //显示图片的配置          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();          ImageLoader.getInstance().displayImage(imageUrl, mImageView, options);  

displayImage方法可以自动裁剪图片匹配控件。
5.可以打印图片加载过程:
代码如下:

public class MyApplication extends Application {      @Override      public void onCreate() {          super.onCreate();          //创建默认的ImageLoader配置参数          ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this)          .writeDebugLogs() //打印log信息          .build();          //Initialize ImageLoader with configuration.          ImageLoader.getInstance().init(configuration);      }  }  

这里写图片描述
6.我们在加载网络图片的时候,经常有需要显示图片下载进度的需求,Universal-Image-Loader当然也提供这样的功能,只需要在displayImage()方法中传入ImageLoadingProgressListener接口就行了,代码如下

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

8.哈可以加载其他途径的代码:

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

需要像上面那样,包裹一下。
9.相信大部分人都是使用GridView,ListView来显示大量的图片,而当我们快速滑动GridView,ListView,我们希望能停止图片的加载,而在GridView,ListView停止滑动的时候加载当前界面的图片,这个框架当然也提供这个功能,使用起来也很简单,它提供了PauseOnScrollListener这个类来控制ListView,GridView滑动过程中停止去加载图片,该类使用的是代理模式
[java] view plaincopy在CODE上查看代码片派生到我的代码片

listView.setOnScrollListener(new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling));          gridView.setOnScrollListener(new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling));  

第一个参数就是我们的图片加载对象ImageLoader, 第二个是控制是否在滑动过程中暂停加载图片,如果需要暂停传true就行了,第三个参数控制猛的滑动界面的时候图片是否加载
10.总结:
loadImage()方法主要通过回调ImageLoadingListener的onLoadingComplete方法,来显示图片。
diaplayImage()方法吧ImageView作为参数传进去,对iamgeView的是若引用,方便垃圾回收,并且可以根据控件的width和height属性,对土拍进行裁剪。

0 0