这里只整理使用方法,方便自己使用,想看详细的解析请转阅
作者:MrTrying
链接:https://www.jianshu.com/p/7ce7b02988a4
來源:
作者:Jiun俊
链接:https://www.jianshu.com/p/e8c204a29623
來源:
非常感谢作者的分享!
一.基本方法
String url = "http://img1.dzwww.com:8080/tupian_pl/20150813/16/7858995348613407436.jpg";
ImageView imageView = (ImageView) findViewById(R.id.imageView);
Glide.with(context)
.load(url)
.into(imageView);
说明:
1.图片的加载会和Activity/Fragment的生命周期保持一致
二. 占位图设置
String url = "http://img1.dzwww.com:8080/tupian_pl/20150813/16/7858995348613407436.jpg";
ImageView imageView = (ImageView) findViewById(R.id.imageView);
Glide.with(context)
.load(url)
.placeholder(R.drawable.place_image)//图片加载出来前,显示的图片
.error(R.drawable.error_image)//图片加载失败后,显示的图片
.into(imageView);
三. 缩略图
Glide.with( context )
.load( url )
.thumbnail( 0.2f )//参数是 float 类型,作为其倍数大小
.into( imageView );
说明:1.简单粗暴,但是如果需要通过网络加载相同的全尺寸图片,就不会很快显示。
private void loadImageThumbnailRequest(){
// setup Glide request without the into() method
DrawableRequestBuilder thumbnailRequest = Glide.with( context ).load( url );
// pass the request as a a parameter to the thumbnail request
Glide.with( context )
.load( url )
.thumbnail( thumbnailRequest )
.into( imageView );
}
说明:1.缩略图可以是不同的资源图片,也可以对缩略图做不同的转换。
四. 动画
Glide.with(context)
.load(url)
.crossFade()//crossFade(int duration)设置动画时间,单位ms,默认300ms
//.dontAnimate()//设置关闭动画效果
.placeholder(R.drawable.place_image)
.error(R.drawable.error_image)
.into(imageView);
//自定义动画
Glide.with(context)
.load(mUrl)
.transform(new RoundTransformation(this , 20))
.animate( R.anim.zoom_in )//自定义动画的资源文件
.into(mImageView);
//使用的Target是自定义情况,需要用到ViewPropertyAnimation.Animator()
ViewPropertyAnimation.Animator animator = new ViewPropertyAnimation.Animator() {
@Override
public void animate(View view) {
view.setAlpha( 0f );
ObjectAnimator fadeAnim = ObjectAnimator.ofFloat( view, "alpha", 0f, 1f );
fadeAnim.setDuration( 2500 );
fadeAnim.start();
}
};
Glide.with(context)
.load(mUrl)
.animate( animator )
.into(viewTarget);
五. 图片大小与裁剪
Glide.with(context)
.load(url)
.override(width,height)//这里的单位是px
.into(imageView);
说明:1.Glide提供两个方法设置图片显示方式:CenterCrop() 和 FitCenter(),作用与imageView的属性一样。
六. 图片的缓存处理
1.内存缓存
Glide.with(context)
.load(url)
.skipMemoryCache(true)//关闭内存缓存,默认是开启的
.into(imageView);
2.磁盘缓存
Glide.with(context)
.load(url)
.diskCacheStrategy( DiskCacheStrategy.NONE )//设置磁盘缓存的方式
.into(imageView);
说明:
1.Glide 不仅缓存了全尺寸的图,还会根据 ImageView 大小所生成的图也会缓存起来。
DiskCacheStrategy 的枚举意义:
DiskCacheStrategy.NONE 什么都不缓存
DiskCacheStrategy.SOURCE 只缓存全尺寸图
DiskCacheStrategy.RESULT 只缓存最终的加载图
DiskCacheStrategy.ALL 缓存所有版本图(默认行为)
七. 图片请求的优先级
//设置 HIGH 优先级
Glide.with( context )
.load( highPriorityImageUrl )
.priority (Priority.HIGH )//Priority.LOW、Priority.NORMAL、Priority.HIGH、Priority.IMMEDIAT四种优先级
.into( imageView );
说明:1.优先级并不是完全严格遵守的。
八. 显示GIf和Video
//如果图片类型不是gif会当做load失败来处理
Glide.with( context )
.load( gifUrl )
.asGif()
.error( R.drawable.error )
.into( imageView );
//只会显示静态的图片,如果是gif,会显示第一帧
Glide.with( context )
.load( gifUrl )
.asBitmap()
.error( R.drawable.error )
.into( imageView );
//加载视频,但只能加载本地视频
String filePath = "/storrage/emulated/0/Pictures/video.mp4";
Glide.with( context )
.load( Uri.fromFile( new File( filePath ) ) )
.into( imageView );
九. Target
1.SimpleTarget
private SimpleTarget mSimpleTarget = new SimpleTarget() {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation super Bitmap> animation) {
mImageView.setImageBitmap(resource);
}
};
private void loadImageSimpleTarget() {
//使用context.getApplicationContext(),这样只有在应用完全停止时 Glide 才会杀死这个图片请求
Glide.with(mContext.getApplicationContext())
.load( mUrl )
.asBitmap()
.into( mSimpleTarget );
}
//还可以指定图片的尺寸
private SimpleTarget mSimpleTarget = new SimpleTarget(500,500) {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation super Bitmap> animation) {
mImageView.setImageBitmap(resource);
}
};
说明:1.这种方法可以获取加载完的Bigmap
2.ViewTarget
public void loadImageTarget(Context context){
//自定义View,无法使用into,就可以使用ViewTarget
CustomView mCustomView = (CustomView) findViewById(R.id.custom_view);
ViewTarget viewTarget = new ViewTarget( mCustomView ) {
@Override
public void onResourceReady(GlideDrawable resource, GlideAnimation super GlideDrawable> glideAnimation) {
//自定义View加载图片的方法
this.view.setImage(resource);
}
};
Glide.with(context)
.load(mUrl)
.into(viewTarget);
}
十. Transformations
Glide.with(context)
.load(mUrl)
//传自定义的Transformation,多个用逗号隔开
.transform(new RoundTransformation(context , 20) , new RotateTransformation(context , 90f))
.into(mImageView);
//设置圆角
Glide.with(mContext)
.load(mUrl)
.transforms(new CenterCrop(), new RoundedCorners(mContext.getResources().getDimensionPixelOffset(R
.dimen.normal_10dp))))
.into(mImageView);
说明:1.https://github.com/wasabeef/glide-transformations
glide-transformations 这个库有两个不同的版本,扩展版本包含了更多的 Transformation
十一. Modules
举例,增加Glide的图片质量
public class QualityModule implements GlideModule{
@Override
public void applyOptions(Context context , GlideBuilder builder){
builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);
}
@Override
public void registerComponents(Context context , Glide glide){
// nothing to do here
}
}
需要在AndroidManifest.xml配置
...
...
十二. Glide 4
1.Glide4语法上做了一些修改,引入了RequestOptions对象。
RequestOptions options
= new RequestOptions()
.transforms()
//.circleCrop()//设置图片显示为圆形
.placeholder(R.drawable.place_holder)
.error(R.drawable.error)
// 可以指定加载图片的大小,不让 Glide 根据控件大小来决定图片大小
.override(200,200)
// 加载原图,Glide 不会自动压缩,容易 OOM
.override(Target.SIZE_ORIGINAL)
// 缓存策略默认开启,禁用方法
.skipMemoryCache(true)
// 禁用掉 Glide 的缓存功能
.diskCacheStrategy(DiskCacheStrategy.NONE);
Glide.with(this)
.asXxx() // asGif / asFile / asBitmap / asDrawable
.load(url)
.apply(options)
.listener()
// .preload//提前对图片进行一个预加载
// .submit()//用于下载图片,不能预加载。关于图片缓存的路径、访问获取缓存文件的方法
.into(ImageView / Target);
//监听 Glide 加载图片的状态
Glide.with(this)
.load("http://www.guolin.tech/book.png")
.listener(new RequestListener() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target target, DataSource dataSource, boolean isFirstResource) {
return false;
}
})
.into(imageView);