Android—Glide使用教程(一)

9,419 阅读4分钟

#Glide 概述

Glide,就像 Picasso,可以从多个源去加载和显示图片,同时也兼顾缓存和在做图片处理的时候维持一个低内存消耗。它已经在 Google 官方 APP (如 Google 2015开发者大会的应用程序)中使用了,就和 Picasso 一样受欢迎。在这个系列中,我们要探讨 Glide 和 Picasso 的不同和优势。

Glide建造者要求最少有三个参数 • With(Context context) ,很多AndroidAPI调用,Context是必须的。 • Load(String imageUrl),这个ImageUrl就是我们要传的图片地址,网络URL。 • Into(ImageView imageView),这个就是我们想把URL 加载到哪个ImageView中。


#配置Gradle

dependencies {
    compile 'com.github.bumptech.glide:glide:3.7.0'
}

上面只是简单的概述一波 Glide可以加载一下几种类型的图片资源:

  1. 加载网络地址资源
   Glide.with(this)
                .load("http://i.imgur.com/DvpvklR.png")
                .fitCenter()
                .into(iv_1);
  1. 加载drawable资源
     Glide.with(this)
                .load(R.drawable.ic_launcher)
                .placeholder(R.mipmap.ic_launcher_round)
                .error(R.mipmap.ic_launcher_round)
                .into(iv_2);
  1. 从Uri加载资源
Uri uri = Uri.parse("android.resource://" + getPackageName() + "/" + R.drawable.ic_launcher);
        tv_title3.setText("从 Uri 中加载");
        Glide.with(this)
                .load(uri)
                .placeholder(R.drawable.ic_launcher)
                .error(R.mipmap.ic_launcher_round)
                .dontAnimate() //加载没有任何动画
                .into(iv_3);
  1. 从文件File加载资源
//这个文件可能不存在于你的设备中。然而你可以用任何文件路径,去指定一个图片路径。
        File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "S61215-011806.jpg");
        tv_title4.setText("从文件中加载");
        Glide.with(this)
                .load(file)
                .into(iv_4);
  1. 还可以加载webp图片资源

当然前面只是讲了皮毛而已,Glide很强大。我们继续了解其它属性。


1. 占位符 placeholder 该属性,在图片资源未加载完成时,占位符会在Imageview里显示

Glide.with(this)
                .load("http://i.imgur.com/DvpvklR.png")
                .placeholder(R.drawable.ic_launcher)
                .into(iv_1);

直接上图,看加载网络地址资源图 这里写图片描述


2. 错误占位符error 该属性,在图片资源加载失败时,占位符会在Imageview里显示 还有一个就是,错误占位符,error()接受的参数只能是已经初始化的 drawable 对象或者指明它的资源(R.drawable.)。

 Glide.with(this)
                .load("http://i.imgur.com/DvpvklR.png")
                .error(R.mipmap.ic_launcher_round)
                .into(iv_1);

直接上图,看加载网络地址资源图 我们可以看到在没网的情况下,我们的异常占位符显示了出来。 反之把网络图片资源加载出来 这里写图片描述


3. 图片淡入动画属性crossFade() 这里要说的是动态图我就不添加了,可以看上面的图

 Glide.with(this)
                .load("http://i.imgur.com/DvpvklR.png")
                .crossFade()
                .into(iv_1)
  1. 根据该源码,我们可以看出crossfade()方法我们可以传参 。crossFade(int duration)。如果你想要去减慢(或加快)动画,随时可以传一个毫秒的时间给这个方法。动画默认的持续时间是 300毫秒。 这里写图片描述

4. dontAnimate() 这个方法就是直接显示图片,没有淡入淡出效果

 Glide.with(this)
                .load("http://i.imgur.com/DvpvklR.png")
                .dontAnimate()
                .into(iv_1)

**5. 图像设置大小 override(horizontalSize, verticalSize) ** Glide 有更加高效的内存管理。Glide 自动限制了图片的尺寸在缓存和内存中,并给到 ImageView 需要的尺寸。对于 Glide,如果图片不会自动适配到 ImageView,调用 override(horizontalSize, verticalSize) 。这将在图片显示到 ImageView之前重新改变图片大小。

 Glide.with(this)
                .load("http://i.imgur.com/DvpvklR.png")
                .override(500, 300)
                .into(iv_1)

当你还没有目标 view 去知道尺寸的时候,这个选项也可能是有用的。比如,如果 App 想要在闪屏界面预热缓存,它还不能测量 ImageView 的尺寸。然而,如果你知道这个图片多少大,用 override 去提供明确的尺寸。


6.缩放图像centerCrop() CenterCrop()是一个裁剪技术,即缩放图像让它填充到 ImageView 界限内并且裁剪额外的部分。ImageView 可能会完全填充,但图像可能不会完整显示。

 Glide.with(this)
                .load("http://i.imgur.com/DvpvklR.png")
                .override(500, 300)
                .centerCrop()
                .into(iv_1)

7.缩放图像fitCenter() fitCenter() 是裁剪技术,即缩放图像让图像都测量出来等于或小于 ImageView 的边界范围。该图像将会完全显示,但可能不会填满整个 ImageView。

 Glide.with(this)
                .load("http://i.imgur.com/DvpvklR.png")
                .override(500, 300)
                .fitCenter()
                .into(iv_1)

8.同时可以加载Gif图像 这里只要是一个GIF图片链接就OK了!

Glide.with(this)
                .load("http://2f.zol-img.com.cn/product/104_1200x900/305/cevDJaCdeLQ6.gif")
                .override(800, 300)
                .into(iv_2);

在开发过程中图片链接是常规图片。那么我们就需要检测是否是动态图,可以看下面代码 **asGif()**该属性可以强制把图片转成GIF类型。

Glide.with(this)
                .load("http://2f.zol-img.com.cn/product/104_1200x900/305/cevDJaCdeLQ6.gif")
                .asGif()
                .into(iv_2);

开发过程中,有些GIF图太大。导致OOM异常,asBitmap()直接把GIF图,转成常规图片(把GIF图片的第一帧当作常规图显示)

Glide.with(this)
                .load("http://2f.zol-img.com.cn/product/104_1200x900/305/cevDJaCdeLQ6.gif")
                .asBitmap()
                .into(iv_2);

9.显示本地视频

String filePath = "/Video/test_video.mp4";
Glide  
    .with( context )
    .load( Uri.fromFile( new File( filePath ) ) )
    .into( imageViewGifAsBitmap );

这里要说的是,只支持本地视频。网络视频URL 是不会工作的。

DEMO地址请自行下载