Glide是 Google推荐的图片加载库,它可以支持来自url,Android资源,文件,Uri中的图片加载,同时还支持gif图片的加载,以及各种图片显示前的bitmap处理(例如:圆角图片,圆形图片,高斯模糊,旋转,灰度等等),缓存处理,请求优先级处理,动画处理,缩略图处理,图片大小自定义等等.可谓是非常的强大.

1.添加Glide库

需要在build.gradle中加入依赖,目前最新的版本是3.7.0,Glide库地址

compile 'com.github.bumptech.glide:glide:3.7.0'

2.加载网络图片


/**         


                    * Created by mChenys on 2016/6/6.         


                    */         


          public          class          TestGlideActivity           extends          Activity {         


                    @Override         


                    protected          void          onCreate(Bundle savedInstanceState) {         


                    super          .onCreate(savedInstanceState);         


                    setContentView(R.layout.activity_test);         


                    String url =           "http://www.qq745.com/uploads/allimg/141106/1-141106153Q5.png"          ;         


                    ImageView targetView = (ImageView) findViewById(R.id.iv_target);         


                    Glide.with(          this          ).         


                    load(url).         


                    asBitmap().           //强制处理为bitmap         


                    into(targetView);          //显示到目标View中         


                    }         


          }



3.加载资源图片


public          class          TestGlideActivity           extends          Activity {         


                    @Override         


                    protected          void          onCreate(Bundle savedInstanceState) {         


                    super          .onCreate(savedInstanceState);         


                    setContentView(R.layout.activity_test);         


                    int          resourceId = R.drawable.test;         


                    ImageView targetView = (ImageView) findViewById(R.id.iv_target);         


                    Glide.with(          this          ).         


                    load(resourceId).         


                    asBitmap().         


                    into(targetView);         


                    }         


          }



4.加载本地文件图片


public          class          TestGlideActivity           extends          Activity {         


                    @Override         


                    protected          void          onCreate(Bundle savedInstanceState) {         


                    super          .onCreate(savedInstanceState);         


                    setContentView(R.layout.activity_test);         


                    File file =           new          File(Environment.getExternalStorageDirectory(),           "test.jpg"          );         


                    ImageView targetView = (ImageView) findViewById(R.id.iv_target);         


                    Glide.with(          this          ).         


                    load(file).         


                    asBitmap().         


                    into(targetView);         


                    }         


          }



5.从Uri中加载


/**         


                    * Created by mChenys on 2016/6/6.         


                    */         


          public          class          TestGlideActivity           extends          Activity {         


                    @Override         


                    protected          void          onCreate(Bundle savedInstanceState) {         


                    super          .onCreate(savedInstanceState);         


                    setContentView(R.layout.activity_test);         


                    Uri uri = Uri.parse(          "android.resource://"          +           this          .getPackageName() +           "/"          + R.drawable.test);         


                    ImageView targetView = (ImageView) findViewById(R.id.iv_target);         


                    Glide.with(          this          ).         


                    load(uri).         


                    asBitmap().         


                    into(targetView);         


                    }         


          }



6.加载gif图片


public          class          TestGlideActivity           extends          Activity {         


                    @Override         


                    protected          void          onCreate(Bundle savedInstanceState) {         


                    super          .onCreate(savedInstanceState);         


                    setContentView(R.layout.activity_test);         


                    ImageView targetView = (ImageView) findViewById(R.id.iv_target);         


                    Glide.with(          this          ).         


                    load(R.drawable.smail).         


                    asGif().          //注意:这里显示的指明了要加载的是gif图片,当然即使不指明,glide也会自己判断.         


                    into(targetView);         


                    }         


          }



效果图:



android glide大图加载缓慢 glide加载原图_android glide大图加载缓慢


7.设置默认图片和加载失败时显示的图片

public         class         TestGlideActivity          extends         Activity {        


                  @Override        


                  protected         void         onCreate(Bundle savedInstanceState) {        


                  super         .onCreate(savedInstanceState);        


                  setContentView(R.layout.activity_test);        


                  ImageView targetView = (ImageView) findViewById(R.id.iv_target);        


                  Glide.with(         this         ).        


                  load(R.drawable.test).        


                  asBitmap().        


                  placeholder(R.drawable.bg_loading).         //加载中显示的图片        


                  error(R.drawable.bg_error).         //加载失败时显示的图片        


                  into(targetView);        


                  }        


         }


8.淡入显示效果

public         class         TestGlideActivity          extends         Activity {        


                  @Override        


                  protected         void         onCreate(Bundle savedInstanceState) {        


                  super         .onCreate(savedInstanceState);        


                  setContentView(R.layout.activity_test);        


                  ImageView targetView = (ImageView) findViewById(R.id.iv_target);        


                  Glide.with(         this         ).        


                  load(R.drawable.test).        


                  placeholder(R.drawable.bg_loading).         //加载中显示的图片        


                  error(R.drawable.bg_error).         //加载失败时显示的图片        


                  crossFade().         //淡入显示,注意:如果设置了这个,则必须要去掉asBitmap        


                  into(targetView);        


                  }        


         }


另外,crossFade还可以接收一个参数来设置淡入显示效果的持续时间,crossFade(int duration);
如果你想直接显示图片,而不是淡入显示图片,则可以通过dontAnimate()方法设置.

9.调整图片像素大小

public         class         TestGlideActivity          extends         Activity {        


                  @Override        


                  protected         void         onCreate(Bundle savedInstanceState) {        


                  super         .onCreate(savedInstanceState);        


                  setContentView(R.layout.activity_test);        


                  ImageView targetView = (ImageView) findViewById(R.id.iv_target);        


                  Glide.with(         this         ).        


                  load(R.drawable.test).        


                  placeholder(R.drawable.bg_loading).         //加载中显示的图片        


                  error(R.drawable.bg_error).         //加载失败时显示的图片        


                  crossFade(         1000         ).         //淡入显示的时间,注意:如果设置了这个,则必须要去掉asBitmap        


                  override(         80         ,         80         ).         //设置最终显示的图片像素为80*80,注意:这个是像素,而不是控件的宽高        


                  into(targetView);        


                  }        


         }


10.设置CenterCrop,FitCenter

CenterCrop,FitCenter都是对目标图片进行裁剪,了解过ImageView的ScaleType属性就知道,这2种裁剪方式在ImageView上也是有的,分别对应ImageView的ImageView.ScaleType.CENTER_CROP和mageView.ScaleType.FIT_CENTER的.

public         class         TestGlideActivity          extends         Activity {        


                  @Override        


                  protected         void         onCreate(Bundle savedInstanceState) {        


                  super         .onCreate(savedInstanceState);        


                  setContentView(R.layout.activity_test);        


                  ImageView targetView = (ImageView) findViewById(R.id.iv_target);        


                  targetView.setScaleType(ImageView.ScaleType.FIT_CENTER);        


                  Glide.with(         this         ).        


                  load(R.drawable.test).        


                  placeholder(R.drawable.bg_loading).         //加载中显示的图片        


                  error(R.drawable.bg_error).         //加载失败时显示的图片        


                  crossFade(         1000         ).         //淡入淡出,注意:如果设置了这个,则必须要去掉asBitmap        


                  override(         80         ,         80         ).         //设置最终显示的图片像素为80*80,注意:这个是像素,而不是控件的宽高        


                  centerCrop().         //中心裁剪,缩放填充至整个ImageView        


                  into(targetView);        


                  }        


         }


11.缓存策略设置

内存缓存设置,通过skipMemoryCache(boolean)来设置是否需要缓存到内存,默认是会缓存到内存的.

/**        


                  * Created by mChenys on 2016/6/6.        


                  */        


         public         class         TestGlideActivity          extends         Activity {        


                  @Override        


                  protected         void         onCreate(Bundle savedInstanceState) {        


                  super         .onCreate(savedInstanceState);        


                  setContentView(R.layout.activity_test);        


                  ImageView targetView = (ImageView) findViewById(R.id.iv_target);        


                  targetView.setScaleType(ImageView.ScaleType.FIT_CENTER);        


                  Glide.with(         this         ).        


                  load(R.drawable.test).        


                  placeholder(R.drawable.bg_loading).         //加载中显示的图片        


                  error(R.drawable.bg_error).         //加载失败时显示的图片        


                  crossFade(         1000         ).         //淡入淡出,注意:如果设置了这个,则必须要去掉asBitmap        


                  override(         80         ,         80         ).         //设置最终显示的图片像素为80*80,注意:这个是像素,而不是控件的宽高        


                  centerCrop().         //中心裁剪,缩放填充至整个ImageView        


                  skipMemoryCache(         true         ).         //跳过内存缓存        


                  into(targetView);        


                  }        


         }


磁盘缓存,磁盘缓存通过diskCacheStrategy(DiskCacheStrategy)来设置,DiskCacheStrategy一共有4种模式:

  1. DiskCacheStrategy.NONE:什么都不缓存
  2. DiskCacheStrategy.SOURCE:仅缓存原图(全分辨率的图片)
  3. DiskCacheStrategy.RESULT:仅缓存最终的图片,即修改了尺寸或者转换后的图片
  4. DiskCacheStrategy.ALL:缓存所有版本的图片,默认模式
public         class         TestGlideActivity          extends         Activity {        


                  @Override        


                  protected         void         onCreate(Bundle savedInstanceState) {        


                  super         .onCreate(savedInstanceState);        


                  setContentView(R.layout.activity_test);        


                  ImageView targetView = (ImageView) findViewById(R.id.iv_target);        


                  targetView.setScaleType(ImageView.ScaleType.FIT_CENTER);        


                  Glide.with(         this         ).        


                  load(R.drawable.test).        


                  placeholder(R.drawable.bg_loading).         //加载中显示的图片        


                  error(R.drawable.bg_error).         //加载失败时显示的图片        


                  crossFade(         1000         ).         //淡入淡出,注意:如果设置了这个,则必须要去掉asBitmap        


                  override(         80         ,          80         ).         //设置最终显示的图片像素为80*80,注意:这个是像素,而不是控件的宽高        


                  centerCrop().         //中心裁剪,缩放填充至整个ImageView        


                  skipMemoryCache(         true         ).         //跳过内存缓存        


                  diskCacheStrategy(DiskCacheStrategy.RESULT).         //保存最终图片        


                  into(targetView);        


                  }        


         }


12.缓存设置

在GlideModule 中,我们可以设置磁盘缓存的位置,磁盘缓存的大小和内存缓存的大小,同时还可以设置图片的显示质量.

要是用GlideModule ,需要创建它的实现类,然后在manifests中申明实现类的全类路径:

<         meta-data        


                  android:name         =         "com.example.mchenys.httputilsdemo.image.glide.module.SimpleGlideModule"        


                  android:value         =         "GlideModule"         />


GlideModule 的实现类,需要实现applyOptions方法:

/**        


                  * 所以你知道要创建一个额外的类去定制 Glide。        


                  * 下一步是要全局的去声明这个类,让 Glide 知道它应该在哪里被加载和使用。        


                  * Glide 会扫描 AndroidManifest.xml 为 Glide module 的 meta 声明。        


                  * 因此,你必须在 AndroidManifest.xml 的 <application> 标签内去声明这个SimpleGlideModule。        


                  * Created by mChenys on 2016/6/10.        


                  */        


         public         class         SimpleGlideModule          implements         GlideModule {        


                  public         static         DiskCache cache;        


                  


                  @Override        


                  public         void         applyOptions(Context context, GlideBuilder builder) {        


                  // 在 Android 中有两个主要的方法对图片进行解码:ARGB8888 和 RGB565。前者为每个像素使用了 4 个字节,        


                  // 后者仅为每个像素使用了 2 个字节。ARGB8888 的优势是图像质量更高以及能存储一个 alpha 通道。        


                  // Picasso 使用 ARGB8888,Glide 默认使用低质量的 RGB565。        


                  // 对于 Glide 使用者来说:你使用 Glide module 方法去改变解码规则。        


                  builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);        


                  //设置缓存目录        


                  File cacheDir = PathUtils.getDiskCacheDir(context, CacheConfig.IMG_DIR);        


                  


                  cache = DiskLruCacheWrapper.get(cacheDir, DiskCache.Factory.DEFAULT_DISK_CACHE_SIZE);         // 250 MB        


                  builder.setDiskCache(         new         DiskCache.Factory() {        


                  @Override        


                  public         DiskCache build() {        


                  return         cache;        


                  }        


                  });        


                  //设置memory和Bitmap池的大小        


                  MemorySizeCalculator calculator =          new         MemorySizeCalculator(context);        


                  int         defaultMemoryCacheSize = calculator.getMemoryCacheSize();        


                  int         defaultBitmapPoolSize = calculator.getBitmapPoolSize();        


                  


                  int         customMemoryCacheSize = (         int         ) (         1.2         * defaultMemoryCacheSize);        


                  int         customBitmapPoolSize = (         int         ) (         1.2         * defaultBitmapPoolSize);        


                  


                  builder.setMemoryCache(         new         LruResourceCache(customMemoryCacheSize));        


                  builder.setBitmapPool(         new         LruBitmapPool(customBitmapPoolSize));        


                  }        


                  


                  @Override        


                  public         void         registerComponents(Context context, Glide glide) {        


                  }        


         }


13.设置图片请求的优先级

Glide 可以用 Priority 枚举来设置图片的加载优先级,这样我们就可以针对那些需要显示的图片设置高的优先级了.

Priority 有4种级别:

  • Priority.LOW
  • Priority.NORMAL
  • Priority.HIGH
  • Priority.IMMEDIATE

例如:

/**        


                  * 高优先级加载        


                  * @param url        


                  * @param imageView        


                  * @param listener        


                  */        


                  public         static         void         loadImageWithHighPriority(Object url,ImageView imageView,          final         LoaderListener listener) {        


                  if         (url ==          null         ) {        


                  if         (listener !=          null         ) {        


                  listener.onError();        


                  }        


                  }          else         {        


                  Glide.with(imageView.getContext()).        


                  load(url).        


                  asBitmap().        


                  priority(Priority.HIGH).         //高优先级        


                  dontAnimate().        


                  listener(         new         RequestListener<Object, Bitmap>() {        


                  @Override        


                  public         boolean         onException(Exception e, Object model, Target<Bitmap> target,          boolean         isFirstResource) {        


                  if         (         null         != listener) {        


                  listener.onError();        


                  }        


                  return         false         ;        


                  }        


                  


                  @Override        


                  public         boolean         onResourceReady(Bitmap resource, Object model, Target<Bitmap> target,          boolean         isFromMemoryCache,          boolean         isFirstResource) {        


                  if         (         null         != listener) {        


                  listener.onSuccess();        


                  }        


                  return         false         ;        


                  }        


                  }).into(imageView);        


                  }        


                  }


14.设置加载缩略图

通过设置缩略图,我们可以在显示目标图片之前先展示一个第分辨率或者其他图片,当全分辨率的目标图片在后台加载完成后,
Glide会自动切换显示全像素的目标图片.

设置缩略图有2种方式:
通过thumbnail(float)指定0.0f~1.0f的原始图像大小,例如全像素的大小是500*500,如果设置为thumbnail为0.1f,即目标图片的10%,显示的缩略图大小就是50*50;

public         class         TestGlideActivity          extends         Activity {        


                  @Override        


                  protected         void         onCreate(Bundle savedInstanceState) {        


                  super         .onCreate(savedInstanceState);        


                  setContentView(R.layout.activity_test);        


                  ImageView targetView = (ImageView) findViewById(R.id.iv_target);        


                  


                  Glide.with(         this         ).        


                  load(R.drawable.test).        


                  placeholder(R.drawable.bg_loading).         //加载中显示的图片        


                  error(R.drawable.bg_error).         //加载失败时显示的图片        


                  crossFade(         1000         ).         //淡入淡出,注意:如果设置了这个,则必须要去掉asBitmap        


                  override(         80         ,          80         ).         //设置最终显示的图片像素为80*80,注意:这个是像素,而不是控件的宽高        


                  centerCrop().         //中心裁剪,缩放填充至整个ImageView        


                  skipMemoryCache(         true         ).         //跳过内存缓存        


                  diskCacheStrategy(DiskCacheStrategy.RESULT).         //保存最终图片        


                  thumbnail(         0         .1f).         //10%的原图大小        


                  into(targetView);        


                  }        


         }


通过thumbnail(DrawableRequestBuilder)方式来指定缩略图,该缩略图可以使用load的所有方式(网络,文件,uri,资源)加载.

public         class         TestGlideActivity          extends         Activity {        


                  @Override        


                  protected         void         onCreate(Bundle savedInstanceState) {        


                  super         .onCreate(savedInstanceState);        


                  setContentView(R.layout.activity_test);        


                  ImageView targetView = (ImageView) findViewById(R.id.iv_target);        


                  //缩略图请求        


                  DrawableRequestBuilder<String> thumbnailRequest = Glide        


                  .with(         this         )        


                  .load(         "http://www.qq745.com/uploads/allimg/141106/1-141106153Q5.png"         );        


                  


                  Glide.with(         this         ).        


                  load(R.drawable.test).        


         //                placeholder(R.drawable.bg_loading).//加载中显示的图片        


         //                error(R.drawable.bg_error).//加载失败时显示的图片        


         //                crossFade(1000).//淡入淡出,注意:如果设置了这个,则必须要去掉asBitmap        


                  override(         80         ,          80         ).         //设置最终显示的图片像素为80*80,注意:这个是像素,而不是控件的宽高        


                  centerCrop().         //中心裁剪,缩放填充至整个ImageView        


                  skipMemoryCache(         true         ).         //跳过内存缓存        


                  diskCacheStrategy(DiskCacheStrategy.RESULT).         //保存最终图片        


                  thumbnail(thumbnailRequest).         //设置缩略图        


                  into(targetView);        


                  }        


         }


1.添加Glide库

需要在build.gradle中加入依赖,目前最新的版本是3.7.0,Glide库地址

compile 'com.github.bumptech.glide:glide:3.7.0'

2.加载网络图片

/**         


                    * Created by mChenys on 2016/6/6.         


                    */         


          public          class          TestGlideActivity           extends          Activity {         


                    @Override         


                    protected          void          onCreate(Bundle savedInstanceState) {         


                    super          .onCreate(savedInstanceState);         


                    setContentView(R.layout.activity_test);         


                    String url =           "http://www.qq745.com/uploads/allimg/141106/1-141106153Q5.png"          ;         


                    ImageView targetView = (ImageView) findViewById(R.id.iv_target);         


                    Glide.with(          this          ).         


                    load(url).         


                    asBitmap().           //强制处理为bitmap         


                    into(targetView);          //显示到目标View中         


                    }         


          }



3.加载资源图片


public          class          TestGlideActivity           extends          Activity {         


                    @Override         


                    protected          void          onCreate(Bundle savedInstanceState) {         


                    super          .onCreate(savedInstanceState);         


                    setContentView(R.layout.activity_test);         


                    int          resourceId = R.drawable.test;         


                    ImageView targetView = (ImageView) findViewById(R.id.iv_target);         


                    Glide.with(          this          ).         


                    load(resourceId).         


                    asBitmap().         


                    into(targetView);         


                    }         


          }



4.加载本地文件图片


public          class          TestGlideActivity           extends          Activity {         


                    @Override         


                    protected          void          onCreate(Bundle savedInstanceState) {         


                    super          .onCreate(savedInstanceState);         


                    setContentView(R.layout.activity_test);         


                    File file =           new          File(Environment.getExternalStorageDirectory(),           "test.jpg"          );         


                    ImageView targetView = (ImageView) findViewById(R.id.iv_target);         


                    Glide.with(          this          ).         


                    load(file).         


                    asBitmap().         


                    into(targetView);         


                    }         


          }



5.从Uri中加载


/**         


                    * Created by mChenys on 2016/6/6.         


                    */         


          public          class          TestGlideActivity           extends          Activity {         


                    @Override         


                    protected          void          onCreate(Bundle savedInstanceState) {         


                    super          .onCreate(savedInstanceState);         


                    setContentView(R.layout.activity_test);         


                    Uri uri = Uri.parse(          "android.resource://"          +           this          .getPackageName() +           "/"          + R.drawable.test);         


                    ImageView targetView = (ImageView) findViewById(R.id.iv_target);         


                    Glide.with(          this          ).         


                    load(uri).         


                    asBitmap().         


                    into(targetView);         


                    }         


          }



6.加载gif图片


public          class          TestGlideActivity           extends          Activity {         


                    @Override         


                    protected          void          onCreate(Bundle savedInstanceState) {         


                    super          .onCreate(savedInstanceState);         


                    setContentView(R.layout.activity_test);         


                    ImageView targetView = (ImageView) findViewById(R.id.iv_target);         


                    Glide.with(          this          ).         


                    load(R.drawable.smail).         


                    asGif().          //注意:这里显示的指明了要加载的是gif图片,当然即使不指明,glide也会自己判断.         


                    into(targetView);         


                    }         


          }