Glide简单使用(一)

#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地址请自行下载

### Glide库的使用方法 #### 什么是GlideGlide个专注于快速高效加载图片的Android开源库。它支持多种数据源,包括本地文件、网络URL以及资源ID等,并提供了灵活的API来满足开发者对于图像处理的各种需求[^1]。 #### 添加依赖 要在项目中集成Glide,首先需要在`build.gradle`文件里加入相应的Maven仓库和依赖项声明: ```gradle dependencies { implementation 'com.github.bumptech.glide:glide:4.x' annotationProcessor 'com.github.bumptech.glide:compiler:4.x' // 如果使用Kotlin则替换为kapt } ``` 注意:这里的`4.x`应替换成具体的版本号,比如最新的稳定版可能是`4.12.0`或其他更新版本。 当应用经过混淆工具(如ProGuard或DexGuard)处理时,为了防止某些类被错误移除或者重命名影响功能正常运作,需额外配置保留特定元数据的信息: ```proguard -keep public class * implements com.bumptech.glide.module.GlideModule -keepresourcexmlelements manifest/application/meta-data@value=GlideModule ``` 以上设置确保即使应用程序被打包优化也不会丢失必要的初始化逻辑。 #### 基本用法示例 下面展示了简单的例子说明如何利用Glide加载张远程图片到ImageView控件当中去: ```java import com.bumptech.glide.request.target.ImageViewTarget; // 加载指定url路径下的图片并显示于image_view对象之上 Glide.with(context) .load(imageUrl) .into(imageView); ``` 此代码片段展示了最基本的调用方式——只需要提供上下文环境(`context`)、目标视图组件(`imageView`)还有待获取的数据位置(`imageUrl`)即可完成整个流程。 另外还可以自定义转换效果,例如圆形裁剪头像之类的操作可以通过第三方插件辅助实现,推荐尝试`glide-transformations`这个扩展库[^2]: ```xml <dependency> <groupId>jp.wasabeef</groupId> <artifactId>glide-transformations</artifactId> <version>LATEST_VERSION</version> </dependency> ``` 之后就可以很方便地应用于实际场景之中了: ```java GlideApp.with(context) .load(url) .transform(new CropCircleWithBorderTransformation(5, Color.WHITE)) .into(imageView); ``` 这里我们引入了种带边框圆角变换的效果作为演示案例[^2]。 尽管如此,在现代开发趋势下也有其他替代方案可供考虑,例如Coil就是种新兴的选择,尤其适合Jetpack Compose框架使用者[^3]。 #### 调试模式注意事项 有时候出于性能考量或是减少APK体积的目的,可能会把些占位符素材单独存放在debug目录结构底下;这样的话正式发布的构建就不会包含这些临时性的图形资产了[^4]。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

怀君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值