第三方的图片加载( Android-Universal-Image-Loader)

学向勤中得,萤窗万卷书。这篇文章主要讲述第三方的图片加载( Android-Universal-Image-Loader)相关的知识,希望能为你提供帮助。
 
【第三方的图片加载( Android-Universal-Image-Loader)】  android-Universal-Image-Loader是一个开源的UI组件程序,该项目的目的是提供一个可重复使用的仪器为异步图像加载,缓存和显示。
(1).使用多线程加载图片
(2).灵活配置ImageLoader的基本参数,包括线程数、缓存方式、图片显示选项等;
(3).图片异步加载缓存机制,包括内存缓存及SDCard缓存;
(4).采用监听器监听图片加载过程及相应事件的处理;
(5).配置加载的图片显示选项,比如图片的圆角处理及渐变动画。
//第一种方法是去网上下载 
地址:https://github.com/nostra13/Android-Universal-Image-Loader
//第二种就是可以依赖 
compile ‘com.nostra13.universalimageloader:universal-image-loader:1.9.3‘
 

1要应用就要先建一个App类 继承Application两种加载 2 3 public class App extends Application { 4@Override 5public void onCreate() { 6super.onCreate(); 7 8 //第一种是创建默认的加载 9 10//创建默认的ImageLoaderConfiguration 11ImageLoaderConfiguration configuration=ImageLoaderConfiguration.createDefault(this); 12//初始化ImageLoader 13ImageLoader.getInstance().init(configuration); 14 15 //第二种是自定义加载 16//自定义加载第三方图片样式 17DisplayImageOptions options = new DisplayImageOptions.Builder() 18.showImageOnLoading(R.drawable.image_nor) // 设置图片下载期间显示的图片 19.showImageForEmptyUri(R.drawable.image_nor) // 设置图片Uri为空或是错误的时候显示的图片 20.showImageOnFail(R.drawable.image_nor) // 设置图片加载或解码过程中发生错误显示的图片 21.resetViewBeforeLoading(true)// default 设置图片在加载前是否重置、复位 22.delayBeforeLoading(200)// 下载前的延迟时间 23.cacheInMemory(true) // default设置下载的图片是否缓存在内存中 24.cacheOnDisk(true) // default设置下载的图片是否缓存在SD卡中 25.considerExifParams(false) // default 26.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default 设置图片以如何的编码方式显示 27.bitmapConfig(Bitmap.Config.RGB_565) // default 设置图片的解码类型 28 //.displayer(new SimpleBitmapDisplayer()) // default还可以设置圆角图片new RoundedBitmapDisplayer(20) 29.displayer(new FadeInBitmapDisplayer(200))// 图片加载好后渐入的动画时间 30 //.displayer(new RoundedBitmapDisplayer(20)) // 设置成圆角图片 31.handler(new Handler()) // default 32.build(); 33 34//设置图片缓存路径 35File cacheDir = StorageUtils.getCacheDirectory(this); 36//自定义ImageLoaderConfiguration配置 37ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this) 38.memoryCacheExtraOptions(480, 800) // default = device screen dimensions 内存缓存文件的最大宽、高 39 //.diskCacheExtraOptions(480, 800, null)// 本地缓存的详细信息(缓存的最大宽、高),最好不要设置这个 40.threadPoolSize(4) // default线程池内加载的数量 41 //.threadPriority(Thread.NORM_PRIORITY - 2) // default 设置当前线程的优先级 42.tasksProcessingOrder(QueueProcessingType.FIFO) // default 43.denyCacheImageMultipleSizesInMemory() 44.memoryCache(new LruMemoryCache(2 * 1024 * 1024)) //可以通过自己的内存缓存实现 45.memoryCacheSize(2 * 1024 * 1024)// 内存缓存的最大值 46.memoryCacheSizePercentage(13) // default 47//可以自定义缓存路径 48.diskCache(new UnlimitedDiskCache(cacheDir)) 49.diskCacheSize(100 * 1024 * 1024) // 100 Mb sd卡(本地)缓存的最大值 50 //.diskCacheFileCount(100)// 可以缓存的文件数量 51// default为使用HASHCODE对UIL进行加密命名, 还可以用MD5(new Md5FileNameGenerator())加密 52.diskCacheFileNameGenerator(new HashCodeFileNameGenerator()) 53 //.connectTimeout (5 s), readTimeout (30 s)//超时时间 54//第二个参数:连接超时时间,第三个参数:读取超时时间 55.imageDownloader(new BaseImageDownloader(this, 5 * 1000, 30 * 1000)) 56.defaultDisplayImageOptions(options) 57.writeDebugLogs() // 打印debug log 58.build(); //开始构建 59 60//初始化ImageLoader 61ImageLoader.getInstance().init(configuration); 62 63}

1 在activity应用 2 3 public class MainActivity extends AppCompatActivity { 4 5private String url; 6 7@Override 8protected void onCreate(Bundle savedInstanceState) { 9super.onCreate(savedInstanceState); 10setContentView(R.layout.activity_main); 11 12//初始化组件 13GridView gridView= (GridView) findViewById(R.id.lv); 14gridView.setAdapter(new ImageAdapter(this,ImageUrlArrays.IMAGE_URL_ARRAYS)); 15 16 17/*//初始化图片加载框架 18final ImageLoader imageLoader = ImageLoader.getInstance(); */ 19 20//第一种加载方式需要个url图片地址 21url = "http://www.chinagirlol.cc/data/attachment/forum/201412/03/233758hw7o7h08kkozkcwi.jpg"; 22imageLoader.displayImage(ImageUrlArrays.IMAGE_URL_ARRAYS[8],imageView); 23 24/*//第二种加载方式 25imageLoader.displayImage(url, imageView, new ImageLoadingListener() { 26@Override//刚开始加载的图片 27public void onLoadingStarted(String s, View view) { 28imageView.setImageResource(R.drawable.image_nor); 29} 30 31@Override //加载失败图片 32public void onLoadingFailed(String s, View view, FailReason failReason) { 33 34} 35 36@Override//加载完成的图片 37public void onLoadingComplete(String s, View view, Bitmap bitmap) { 38imageView.setImageBitmap(bitmap); 39} 40 41@Override//取消加载 42public void onLoadingCancelled(String s, View view) { 43 44} 45}); */ 46 47/*//第三种加载方式设固定宽高 48ImageSize imageSize=new ImageSize(140,160); 49imageLoader.loadImage(ImageUrlArrays.IMAGE_URL_ARRAYS[10],imageSize,new SimpleImageLoadingListener(){ 50@Override 51public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { 52super.onLoadingComplete(imageUri, view, loadedImage); 53imageView.setImageBitmap(loadedImage); 54} 55}); 56 */ 57} 58}

  以上代码在以后的修改比较麻烦 所以我们可以自己在封装起来,变成自己的再用,方便修改
1 public class WXHLImageLoader { 2 3//懒汉单例 4private static WXHLImageLoader wxhlImageLoader; 5//获取第三方的ImageLoader 6private ImageLoader imageLoader; 7 8private WXHLImageLoader(){ 9imageLoader = ImageLoader.getInstance(); 10} 11 12/** 13* 单例 14* @return 15*/ 16public static synchronized WXHLImageLoader getInstance(){ 17 //return wxhlImageLoader; 18if(wxhlImageLoader == null){ 19wxhlImageLoader = new WXHLImageLoader(); 20} 21return wxhlImageLoader; 22} 23 24/** 25* 显示图片 26* @param imageUrl 27* @param imageView 28*/ 29public void displayImage(String imageUrl, ImageView imageView){ 30imageLoader.displayImage(imageUrl,imageView); 31} 32 33/** 34* 显示图片,带监听器的 35* @param imageUrl 36* @param imageView 37*/ 38public void displayImage(String imageUrl, ImageView imageView,ImageLoadingListener listener){ 39imageLoader.displayImage(imageUrl,imageView,listener); 40} 41 42/** 43* 加载图片,带监听器的 44* @param imageUrl 45* @param listener 46*/ 47public void loadImage(String imageUrl, SimpleImageLoadingListener listener){ 48imageLoader.loadImage(imageUrl,listener); 49} 50 51/** 52* 加载图片,带监听器的 53* @param imageUrl 54* @param listener 55*/ 56public void loadImage(String imageUrl, int width, int height, SimpleImageLoadingListener listener){ 57ImageSize targetSize = new ImageSize(width, height); // result Bitmap will be fit to this size 58imageLoader.loadImage(imageUrl,targetSize,listener); 59} 60 61 62 }

 
 
 






    推荐阅读