Glide 是 Google 员工的开源项目, Google I/O 上被推荐使用,一个高效、开源、Android设备上的媒体管理框架,它遵循BSD、MIT以及Apache 2.0协议发布。Glide具有获取、解码和展示视频剧照、图片、动画等功能,它还有灵活的API,这些API使开发者能够将Glide应用在几乎任何网络协议栈里。创建Glide的主要目的有两个,一个是实现平滑的图片列表滚动效果,另一个是支持远程图片的获取、大小调整和展示。
gitHub地址:https://github.com/bumptech/glide
1.集成环境
集成环境:在 Gradle 项目中在你的 ==build.gradle== 中添加以下代码,后面的3.6.1表示版本号,可以去github上查看最新的版本,
compile 'com.github.bumptech.glide:glide:3.6.1'
也可以使用mave集成环境:
<dependency>
<groupId>com.github.bumptech.glide</groupId>
<artifactId>glide</artifactId>
<version>3.6.1</version>
<type>aar</type>
</dependency>
2.开始使用
2.1最简单的使用:
Glide.with(context).load(imageUrl).into(imageView);
参数说明:context可以是Context、Activity、FragmentActivity、Fragment。表示将加载 图片的请求周期动态管理起来
imageUrl:可以是文件对象、uri。表示要加载路片的路径,可以加载网络的图片。
imageView:表示要显示图片的控件。
2.2 在listView或者GridView中使用Glide
使用Glide在listView中加载图片和普通的使用方法一样,我们只需要在adapter中实现即可实现加载
Glide
.with(context)
.load(imageUrls[position])
.into((ImageView) convertView);
2.3 缓存策略
Glide框架自带了很多中的缓存策略,但是很多时候我们需要根据实际情况来进行选择缓存策略。下面介绍怎么更改缓存策略。
2.3.1 自定义缓存策略
Glide.with(this)
.load(imageUrl)
.diskCacheStrategy(DiskCacheStrategy.ALL)//设置缓存策略
.into(imageView);
缓存策略中参数说明:
all:缓存源资源和转换后的资源
none:不作任何磁盘缓存
source:缓存源资源
result:缓存转换后的资源
2.3.2 内存缓存策略:
Glide
.with( context )
.load( eatFoodyImages[0] )
.skipMemoryCache( true )//设置跳过内存缓存
.into( imageViewInternet );
需要注意的是,这里的跳过内存缓存指的是不将图片缓存到内存中,对于网络图片,还是会将图片缓存到本地的磁盘中以避免重复网络加载。对于同以个url图片地址,两次在对内存缓存设置不一致时,会默认执行不跳过内存缓存,即执行==skipMemoryCache( false )==语句。
2.3.3 磁盘缓存策略:
Glide
.with( context )
.load( imageUrl )
.diskCacheStrategy( DiskCacheStrategy.NONE )//单独禁用磁盘缓存,但是内存缓存仍然使用
.into( imageViewInternet );
如果需要将所有的内存和磁盘缓存全部警用,则可以参考下面的代码:
Glide
.with( context )
.load( imageUrl )
.diskCacheStrategy( DiskCacheStrategy.NONE )//禁用所有缓存
.skipMemoryCache( true )//禁用内存缓存
.into( imageViewInternet );
2.4 占位符何加载动画
2.4.1设置加占位符号:
Glide
.with(context)
.load(UsageExampleListViewAdapter.eatFoodyImages[0])
.placeholder(R.mipmap.ic_launcher) //设置占位符
.error(R.mipmap.future_studio_launcher) //设置错误占位符 .into(imageViewPlaceholder);
2.4.2 设置加载动画
在加载图片时突然改变图片会显得比较显眼,所以我们可以使用动画效果来实现一个比较平滑的过度效果。Glide默认使用淡入淡出效果,如果你想用其他的动画效果,可参考下面的代码:
Glide
.with(this)
.load(imageUrl)
.animate(R.anim.item_alpha_in)
.into(imageView);
R.anim.item_alpha_in的代码:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
android:duration="500"
android:fromAlpha="0.0"
android:toAlpha="1.0"/>
</set>
但是如果你想直接现实图片而不适用任何效果,可以在Glide的建造者中调用.dontAnimate().
Glide
.with(context)
.load(UsageExampleListViewAdapter.eatFoodyImages[0])
.placeholder(R.mipmap.ic_launcher) //
.error(R.mipmap.future_studio_launcher) //
.dontAnimate()//不实现动画效果
.into(imageViewFade);
2.5 重设图片大小和缩放
2.5.1 使用Override设置加载尺寸
Glide
.with(context)
.load(imageUrl)
.override(600, 200) //
.into(imageViewResize);
2.5.2 设置缩略图支持
简单的缩略图
Glide
.with(this)
.load(imageUrl)
.thumbnail(0.1f)//设置缩略图,0.1f表示显示原来图像的10%
.into(imageView);
用其他请求
private void loadImageThumbnailRequest() {
DrawableRequestBuilder<String> thumbnailRequest = Glide
.with( context )
.load( imageUrl );
Glide
.with( context )
.load( UsageExampleGifAndVideos.gifUrl )
.thumbnail( thumbnailRequest )
.into( imageView3 );
}
第一个缩略图请求是完全独立于第二个原始请求的。该缩略图可以是不同的资源或图片 URL,你可以为其应用不同的转换。
2.5.3 缩放图片
对于任何图像操作,调整大小会让你的图片变得长宽失真,显示变得不正常。
这个时候可以使用裁剪技术来避免这种情况发生。
Glide
.with(context)
.load(imageUrl)
.override(600, 200) //改变图片的大小
.centerCrop() // 缩放图像让他填充到imageView界限内并且裁剪额外的部分。imageview可能会完全填充,但图像可能不会完整显示。
.fitCenter() //缩放图像让图像测量出来小于或者等于imageview的边界范围,改图会完全显示,但可能不会填充整个uimageView。与centerCrop()裁剪技术二选一。
.into(imageView);
2.5.4 设置动态GIF加载方式
Glide
.with(this)
.load(imageUrl)
.asBitmap()
.into(imageView);//显示gif静态图片
Glide
.with(this)
.load(imageUrl)
.asGif()
.into(imageView);//显示gif动态图片
以上就是比较常见的Glide的用法,目前就写了这么多,以后有需要在添加更多的用法把。
~~