第三方的图片加载( 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'
配置文件要设置网络权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
先建一个App类 继承Application (其中两种加载)
建好后必须要在配置文件内初始化(注册.App)
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
//第一种是创建默认的加载 //创建默认的ImageLoaderConfiguration
ImageLoaderConfiguration configuration=ImageLoaderConfiguration.createDefault(this);
//初始化ImageLoader
ImageLoader.getInstance().init(configuration); //第二种是自定义加载
//自定义加载第三方图片样式
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.image_nor) // 设置图片下载期间显示的图片
.showImageForEmptyUri(R.drawable.image_nor) // 设置图片Uri为空或是错误的时候显示的图片
.showImageOnFail(R.drawable.image_nor) // 设置图片加载或解码过程中发生错误显示的图片
.resetViewBeforeLoading(true) // default 设置图片在加载前是否重置、复位
.delayBeforeLoading(200) // 下载前的延迟时间
.cacheInMemory(true) // default 设置下载的图片是否缓存在内存中
.cacheOnDisk(true) // default 设置下载的图片是否缓存在SD卡中
.considerExifParams(false) // default
.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default 设置图片以如何的编码方式显示
.bitmapConfig(Bitmap.Config.RGB_565) // default 设置图片的解码类型
// .displayer(new SimpleBitmapDisplayer()) // default 还可以设置圆角图片new RoundedBitmapDisplayer(20)
.displayer(new FadeInBitmapDisplayer(200))// 图片加载好后渐入的动画时间
// .displayer(new RoundedBitmapDisplayer(20)) // 设置成圆角图片
.handler(new Handler()) // default
.build(); //设置图片缓存路径
File cacheDir = StorageUtils.getCacheDirectory(this);
//自定义ImageLoaderConfiguration配置
ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this)
.memoryCacheExtraOptions(480, 800) // default = device screen dimensions 内存缓存文件的最大宽、高
// .diskCacheExtraOptions(480, 800, null) // 本地缓存的详细信息(缓存的最大宽、高),最好不要设置这个
.threadPoolSize(4) // default 线程池内加载的数量
// .threadPriority(Thread.NORM_PRIORITY - 2) // default 设置当前线程的优先级
.tasksProcessingOrder(QueueProcessingType.FIFO) // default
.denyCacheImageMultipleSizesInMemory()
.memoryCache(new LruMemoryCache(2 * 1024 * 1024)) //可以通过自己的内存缓存实现
.memoryCacheSize(2 * 1024 * 1024) // 内存缓存的最大值
.memoryCacheSizePercentage(13) // default
//可以自定义缓存路径
.diskCache(new UnlimitedDiskCache(cacheDir))
.diskCacheSize(100 * 1024 * 1024) // 100 Mb sd卡(本地)缓存的最大值
// .diskCacheFileCount(100) // 可以缓存的文件数量
// default为使用HASHCODE对UIL进行加密命名, 还可以用MD5(new Md5FileNameGenerator())加密
.diskCacheFileNameGenerator(new HashCodeFileNameGenerator())
// .connectTimeout (5 s), readTimeout (30 s) //超时时间
//第二个参数:连接超时时间,第三个参数:读取超时时间
.imageDownloader(new BaseImageDownloader(this, 5 * 1000, 30 * 1000))
.defaultDisplayImageOptions(options)
.writeDebugLogs() // 打印debug log
.build(); //开始构建 //初始化ImageLoader
ImageLoader.getInstance().init(configuration); }
 在activity应用 
 public class MainActivity extends AppCompatActivity {
     private String url;
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
         //初始化组件
          GridView gridView= (GridView) findViewById(R.id.lv);
         gridView.setAdapter(new ImageAdapter(this,ImageUrlArrays.IMAGE_URL_ARRAYS));
   /*  //初始化图片加载框架
         final ImageLoader imageLoader = ImageLoader.getInstance();*/
         //第一种加载方式  需要个url图片地址
         url = "http://www.chinagirlol.cc/data/attachment/forum/201412/03/233758hw7o7h08kkozkcwi.jpg";
       imageLoader.displayImage(ImageUrlArrays.IMAGE_URL_ARRAYS[8],imageView);
     /*  //第二种加载方式
         imageLoader.displayImage(url, imageView, new ImageLoadingListener() {
             @Override  //刚开始加载的图片
             public void onLoadingStarted(String s, View view) {
                 imageView.setImageResource(R.drawable.image_nor);
             }
             @Override //加载失败图片
             public void onLoadingFailed(String s, View view, FailReason failReason) {
             }
             @Override//加载完成的图片
             public void onLoadingComplete(String s, View view, Bitmap bitmap) {
                 imageView.setImageBitmap(bitmap);
             }
             @Override//取消加载
             public void onLoadingCancelled(String s, View view) {
             }
         });*/
      /*   //第三种加载方式  设固定宽高
         ImageSize imageSize=new ImageSize(140,160);
         imageLoader.loadImage(ImageUrlArrays.IMAGE_URL_ARRAYS[10],imageSize,new SimpleImageLoadingListener(){
             @Override
             public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                 super.onLoadingComplete(imageUri, view, loadedImage);
                 imageView.setImageBitmap(loadedImage);
             }
         });
 */
        }
     }
以上代码在以后的修改比较麻烦 所以我们可以自己在封装起来,变成自己的再用,方便修改
 public class WXHLImageLoader {
     //懒汉单例
     private static WXHLImageLoader wxhlImageLoader;
     //获取第三方的ImageLoader
     private ImageLoader imageLoader;
     private WXHLImageLoader(){
         imageLoader = ImageLoader.getInstance();
     }
     /**
      * 单例
      * @return
      */
     public static synchronized WXHLImageLoader getInstance(){
 //        return wxhlImageLoader;
         if(wxhlImageLoader == null){
             wxhlImageLoader = new WXHLImageLoader();
         }
         return wxhlImageLoader;
     }
     /**
      * 显示图片
      * @param imageUrl
      * @param imageView
      */
     public void displayImage(String imageUrl, ImageView imageView){
         imageLoader.displayImage(imageUrl,imageView);
     }
     /**
      * 显示图片,带监听器的
      * @param imageUrl
      * @param imageView
      */
     public void displayImage(String imageUrl, ImageView imageView,ImageLoadingListener listener){
         imageLoader.displayImage(imageUrl,imageView,listener);
     }
     /**
      * 加载图片,带监听器的
      * @param imageUrl
      * @param listener
      */
     public void loadImage(String imageUrl, SimpleImageLoadingListener listener){
         imageLoader.loadImage(imageUrl,listener);
     }
     /**
      * 加载图片,带监听器的
      * @param imageUrl
      * @param listener
      */
     public void loadImage(String imageUrl, int width, int height, SimpleImageLoadingListener listener){
         ImageSize targetSize = new ImageSize(width, height); // result Bitmap will be fit to this size
         imageLoader.loadImage(imageUrl,targetSize,listener);
     }
 }
第三方的图片加载( Android-Universal-Image-Loader)的更多相关文章
- Android 框架修炼-自己开发高效异步图片加载框架
		一.概述 目前为止,第三方的图片加载框架挺多的,比如UIL , Volley Imageloader等等.但是最好能知道实现原理,所以下面就来看看设计并开发一个加载网络.本地的图片框架. 总所周知,图 ... 
- Android高效异步图片加载框架
		概述 Android高效异步图片加载框架:一个高效的异步加载显示的图片加载框架,同时具备图片压缩,缓存机制等特性. 详细 代码下载:http://www.demodashi.com/demo/1214 ... 
- Android开发三种第三方图片加载的框架
		最近在项目中用到了大量图片加载,第三方优秀框架还不错,下面介绍三款榜首的框架用法和问题,做一个记录. 现在项目使用的是Android Studio开发的,现在也没有多少人使用Eclipse了吧. 一. ... 
- Android开源库--Universal Image Loader通用图片加载器
		如果说我比别人看得更远些,那是因为我站在了巨人的肩上. github地址:https://github.com/nostra13/Android-Universal-Image-Loader 介绍 ... 
- Android中常见的图片加载框架
		图片加载涉及到图片的缓存.图片的处理.图片的显示等.而随着市面上手机设备的硬件水平飞速发展,对图片的显示要求越来越高,稍微处理不好就会造成内存溢出等问题.很多软件厂家的通用做法就是借用第三方的框架进行 ... 
- Android 三大图片加载框架的对比——ImageLoader,Picasso,Glide
		一.ImageLaoder介绍 << Universal ImageLoader 是很早开源的图片缓存,在早期被很多应用使用 多线程下载图片,图片可以来源于网络,文件系统,项目文件夹ass ... 
- Android图片加载库的理解
		前言 这是“基础自测”系列的第三篇文章,以Android开发需要熟悉的20个技术点为切入点,本篇重点讲讲Android中的ImageLoader这个库的一些理解,在Android上最让人头疼是 ... 
- Android图片加载与缓存开源框架:Android Glide
		<Android图片加载与缓存开源框架:Android Glide> Android Glide是一个开源的图片加载和缓存处理的第三方框架.和Android的Picasso库类似,个人感觉 ... 
- 一起写一个Android图片加载框架
		本文会从内部原理到具体实现来详细介绍如何开发一个简洁而实用的Android图片加载缓存框架,并在内存占用与加载图片所需时间这两个方面与主流图片加载框架之一Universal Image Loader做 ... 
随机推荐
- Discovering-论文
			Discovering Spatio-Temporal Causal Interactions in Traffic Data Streams data:real taxi trajectories ... 
- Java操作excel
			慕课网的好课程: http://www.imooc.com/learn/354 
- Win7开机登陆密码忘记了?不必重做系统(详图)
			1)如果是普通账户密码忘了.方法:重新启动电脑,启动到系统登录界面时,同时按住Ctrl+Alt键,然后连击Del键两次,会出现新的登录界面,用户名处输入“Administrator”密码为空,回车即 ... 
- eclispe或者myeclispe maven jar包不能部署到tomcat下
			我们在做web开发是,经常都要在eclipse或者myeclipse中搭建web服务器,并将开发中的web项目部署到web服务器进行调试,在此,我选择的是tomcat服务器.之前部署web项目到tom ... 
- asp.net的mongodb实例
			mongodb为2.6版本, .net是4.0, c#接口时1.7. 运行环境为windows8 with visual studio2010 注意事项:在mongodb中使用地理位置存储信息且动用到 ... 
- python学习笔记之常用模块(第五天)
			参考老师的博客: 金角:http://www.cnblogs.com/alex3714/articles/5161349.html 银角:http://www.cnblogs.com/wupeiqi/ ... 
- iOS屏幕旋转
			三种方法 需求:全局主要是竖屏 个别界面需要横屏 
- Java 把 InputStream 转换成 String 的几种方法
			我们在 Java 中经常会碰到如何把 InputStream 转换成 String 的情形,比如从文件或网络得到一个 InputStream,需要转换成字符串输出或赋给别的变量. 未真正关注这个问题之 ... 
- 设置myeclipse新建jsp文件默认编码为UTF-8
			有三个地方需要改编码设置: 1. window-->preference-->general-->contenttype 然后在content types中展开每一个子项,并在Def ... 
- webpack react基础配置二 热加载
			用到 webpack-dev-server 先安装,注意 装到全局 还是本项目我也没注意 因为之前一直报错,有很小可能是安装到本地解决了,或者是我网络问题: 装到全局:$ npm install ... 
