一、简介
在泰国举行的谷歌开发者论坛上,谷歌为我们介绍了一个名叫Glide
的图片加载库,作者是bumptech
。这个库被广泛的运用在Google
的开源项目中,包括2014
年Google I/O
大会上发布的官方App
。
Glide
是一款由Bump Technologies
开发的图片加载框架,使得我们可以在Android
平台上以极度简单的方式加载和展示图片。Glide
默认使用HttpUrlConnection
进行网络请求,为了让App
保持一致的网络请求形式,可以让Glide
使用我们指定的网络请求形式请求网络资源。
二、依赖
1.jar
包
Github
地址:https://github.com/bumptech/glide/releases
2.Gradle
dependencies {
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'com.android.support:support-v4:23.3.0'
}
三、权限
<uses-permission android:name="android.permission.INTERNET" />
四、混淆
-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
**[] $VALUES;
public *;
}
五、使用
查看Glide
最新版本:http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22glide%22
Glide.with(this).load(url).into(view);
Glide.with()
方法用于创建一个加载图片的实例。with()
方法可以接收Context
、Activity
、Fragment
或者FragmentActivity
类型的参数,因此可供我们选择的范围非常广。在Activity
、Fragment
或者FragmentActivity
中调用with()
方法时都可以直接传this
,不在这些类中时可获取当前应用程序的ApplicationContext
传入with()
方法中。特别需要注意的是with()
方法中传入的实例会决定Glide
加载图片的生命周期,如果传入的是Activity
、Fragment
或者FragmentActivity
的实例,那么当其被销毁时图片加载也会停止,如果传入的是ApplicationContext
时只有当应用程序被杀掉的时候图片加载才会停止。
Glide.with(Context context);// 绑定Context
Glide.with(Activity activity);// 绑定Activity
Glide.with(FragmentActivity activity);// 绑定FragmentActivity
Glide.with(Fragment fragment);// 绑定Fragment
load()
方法用于指定待加载的图片资源。Glide
支持加载各种各样的图片资源,包括网络图片、本地图片、应用资源、二进制流、Uri
对象等。
into()
方法用于图片显示的对应ImageView
。
Glide
支持加载gif
图片,其内部会自动判断图片格式,并且可以正确的将它解析并显示出来。
使用Glide
加载图片不用担心内存浪费,甚至是内存溢出的问题。因为Glide
不会直接将图片的完整尺寸全部加载到内存中,而是用多少加载多少。Glide
会自动判断ImageView
的大小,然后只将这么大的图片像素加载到内存当中,帮助我们节省内存开支。
六、方法
1.指定图片格式
如果调用了.asBitmap()
方法,则.load()
中的参数指向的可以是一个静态图片也可以是GIF
图片,如果是一张GIF
图片,则加载之后只会展示GIF
图片的第一帧。
如果调用的.asGif()
方法,则.load()
方法中的参数指向的必须是一个GIF
图片,如果是一张静态图片,则图片加载完成之后展示的只是图片占位符(如果没有设置图片占位符,则什么也不展示)。
//显示静态图片(若加载的是gif图那么就会显示第一帧的图片)
.asBitmap()
//显示动态图片(若加载的是静态图会加载失败)
.asGif()
2.指定占位图显示
//加载时显示的图片
.placeholder(R.drawable.image_load)
//加载失败时显示的图片
.error(R.drawable.image_error)
3.设置缓存
//禁止内存缓存
.skipMemoryCache(true)
//禁止磁盘缓存(Glide默认缓存策略是:DiskCacheStrategy.RESULT)
.diskCacheStrategy(DiskCacheStrategy.NONE)
//缓存参数
//ALL:缓存源资源和转换后的资源(即缓存所有版本图像,默认行为)
//NONE:不作任何磁盘缓存,然而默认的它将仍然使用内存缓存
//SOURCE:仅缓存源资源(原来的全分辨率的图像)
//RESULT:缓存转换后的资源(最终的图像,即降低分辨率后的或者是转换后的)
4.设置加载尺寸
以下方法可以设置图片加载之后展示的宽度值和高度值,前提是目标ImageView
的宽度和高度都设置为wrap_content
。
//加载图片为100*100像素的尺寸
.override(100, 100)
5.设置图片缩放
如果调用了.centerCrop()
方法,则显示图片的时候短的一边填充容器,长的一边跟随缩放;如果调用了.fitCenter()
方法,则显示图片的时候长的一边填充容器,短的一边跟随缩放;这两个方法可以都调用,如果都调用,则最终显示的效果是后调用的方法展示的效果。
//它是一个裁剪技术,即缩放图像让它填充到ImageView界限内并且裁剪额外的部分,ImageView可能会完全填充,但图像可能不会完整显示
.centerCrop()
//它是一个裁剪技术,即缩放图像让图像都测量出来等于或小于ImageView的边界范围,该图像将会完全显示,但可能不会填满整个ImageView
.fitCenter()
6.设置资源加载优先级
.priority(Priority.HIGH)
7.设置圆角或圆形图片
//圆角图片
.transform(new GlideRoundTransform(this))
//圆形图片
.transform(new GlideCircleTransform(this))
8.设置缩略图
设置以下方法后会先加载这张图片的sizeMultiplier
倍的缩略图到目标ImageView
中,然后再慢慢加载完整的图片,sizeMultiplier
值的范围是0~1
。
//方法一:系数需在(0,1)之间,0.5f为原图的1/2,这样会先加载缩略图然后在加载全图
.thumbnail(0.5f)
//方法二:自定义资源图片为缩略图
DrawableRequestBuilder<Integer> thumbnailRequest = Glide
.with(context)
.load(R.drawable.image_example);
Glide.with(context)
.load(url)
.thumbnail(thumbnailRequest)
.into(view);
9.设置动画
加载图片时所展示的动画,可以是Animator
类型的属性动画,也可以是int
类型的动画资源。这个动画只在第一次加载的时候会展示,以后都会从缓存中获取图片,因此也就不会展示动画了。
//设置加载动画
.animate(R.anim.alpha_in)
//淡入淡出动画,也是默认动画,动画默认的持续时间是300毫秒
.crossFade()
//移除所有动画
.dontAnimate()
10.加载本地视频(相当于一张缩略图)
//只能加载本地视频(显示的只是视频的第一帧图像,相当于一张缩略图,不能播放视频),网络视频无法加载
String files = Environment.getExternalStorageDirectory().getAbsolutePath() + "/glide.avi";
Glide.with(this).load(files).into(view);
11.设置加载内容
//示例一
Glide.with(context).load(url).into(new SimpleTarget<GlideDrawable>() {
@Override
public void onResourceReady(GlideDrawable resource, GlideAnimation<? super GlideDrawable> glideAnimation) {
//图片加载完成
view.setImageDrawable(resour