一、引入项目
添加依赖
dependencies {
compile
'com.github.bumptech.glide:glide:3.5.2'
compile
'com.android.support:support-v4:22.0.0'
}
二、最简单加载图片
Glide.with(context)
.load(
"http://inthecheesefactory.com/uploads/source/glidepicasso/cover.jpg")
.into(ivImg);
三、其他特性
①Glide缓存全尺寸
Glide.with(
this)
.load(
"http://nuuneoi.com/uploads/source/playstore/cover.jpg")
.diskCacheStrategy(
DiskCacheStrategy.ALL)
.into(ivImgGlide);
②设置占位图或者加载错误图:
.placeholder(
R.drawable
.placeholder)
.error(
R.drawable
.imagenotfound)
③加载gif
String gifUrl =
"xxxxx";
Glide.with( context ).load( gifUrl ).into( imageViewG
if );
一些常规方法(待加载时显示,加载出错时显示)
Glide.with(
context ).load(
gifUrl ).placeholder(
R.drawable.cupcake ).error(
R.drawable.full_cake ).into(
imageViewGif );
④强制转化为gif
Glide.with(
context ).load(
gifUrl ).asGif().error(
R.drawable.full_cake ).into(
imageViewGif );
⑤用bitMap播放Gif
Glide.with(
context ).load(
gifUrl ).asBitmap().into(
imageViewGifAsBitmap );
⑥播放本地mp4,只能是本地
String filePath =
"/storage/emulated/0/Pictures/example_video.mp4"Glide.
with( context ).load(
Uri.fromFile( **
new **
File( filePath ) ) ).into( imageViewGifAsBitmap );
⑦在上面这些等价ScrollView中,Glide会自动的请求取消,清楚ImageView,在合适的ImageView中加载合适的Image.当需要裁剪大小时,有个*.centerCrop*方法,这个方法的裁剪会让你的ImageView周围不会留白,还有一个.fitCenter()方法,表示让你的Image完全显示,尺寸不对时,周围会留白。
⑧加点动画渐显动画
Glide.with(
context)
.load().placeholder(
R.mipmap.ic_launcher)
.error(
R.mipmap.future_studio_launcher)
.crossFade()
.into(
imageViewFade);
⑨调整图片大小.resize(int ,int )
单位是像素,裁剪你的图片大小。其实Glide已经会自动根据你mageView裁剪照片来放在缓存中了。但是不想适应ImageView大小的时候,可以调用这个方法.override()。
Glide.with(
context)
.load(
image)
.override(600, 200)
.into(
imageViewResize);
⑩裁剪图片
.fitCenter和.CenterCrop
来点缩略图
.thumbnail()方法的目的就是让用户先看到一个低解析度的图,点开后,再加载一个高解析度的图。
Glide.
with( context )
.load(image)
.thumbnail( 0.
1f )//表示为原图的十分之一
.
into( imageView2 );
外存缓存机制
Glide默认会缓存Image的很多个版本,比如原图,如果你的imageView大小的缓存。.diskCacheStrategy( )有以下几种缓存策略:
DiskCacheStrategy.NONE 什么都不缓存DiskCacheStrategy.SOURCE 只缓存最高解析图的imageDiskCacheStrategy.RESULT 缓存最后一次那个image,比如有可能你对image做了转化DiskCacheStrategy.ALL image的所有版本都会缓存
Glide.with(
context ).load(
image )
.diskCacheStrategy(
DiskCacheStrategy.SOURCE )
.into(
imageViewFile );
请求优先级.request()
加载图片肯定也是有先后顺序,Glide提供了.request()这个方法,它接收以下几个参数:Priority.LOWPriority.NORMALPriority.HIGHPriority.IMMEDIATE 但是Glide并不一定会按照你的顺序来,只是尽量按照你的顺序来。
利用callback在非标准情况下加载图片
上名所有的情况都是加载图片到ImageView中,但是并不是所有的情况都是这样。
Glide中的回调:Targets
从上面的介绍,已经可以看出Glide内部封装了所有的细节,什么网络请求,什么缓存机制,当所有都就绪过后,自动切换回UI线程,更新ImageView。Targets就是Glide中的回调,当异步线程中所有的工作做完过后返回结果。说白了就是,当请求图片完成后,需要回调的方法。
SimplerTarget
private SimpleTarget target =
new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap bitmap, GlideAnimation glideAnimation) {
// do something with the bitmap// for demonstration purposes, let's just set it to an ImageView
imageView1.setImageBitmap( bitmap );
}
};
private void loadImageSimpleTarget() {
Glide.with( context ) *
// could be an issue!*
.load( eatFoodyImages[
0] )
.asBitmap()
//强制Glide返回一个Bitmap
.
into( target );}
注意事项:
上面这段代码不要写成匿名内部类的机制,原因就是java的自动垃圾回收机制可能在图片还没有加载好的时候就已经把你的Target回收了。注意.with()里面的参数,Glide的请求是和传进去的Context共存亡的,如果传一个Activity进去,当Activity GG过后,你的请求也就GG了,但是如果这样传:.with(context.getApplicationContext() ).当你的Activity GG过后,请求还是会继续,回调还是会继续。
有size的Target
如果传给.into()的是一个ImageView,但是图片的size比ImageView的Size打,Glide为了节省时间,会加载小的那个size的Image。但是这对Target并不适用,以为这里并不知道SIze。但是如果知道image应该多大,可以传递给Target.就像下面这样:
private SimpleTarget target2 =
new SimpleTarget<Bitmap>(
250,
250 ) {
@Override
public void onResourceReady(Bitmap bitmap, GlideAnimation glideAnimation) {imageView2.setImageBitmap( bitmap );
}
};
private void loadImageSimpleTargetApplicationContext() {
Glide.with( context.getApplicationContext() ) *
// safer!*
.load( eatFoodyImages[
1] )
.asBitmap()
.into( target2 );
}
ViewTarget
适用于想Glide加载到自定义View中去,
public class FutureStudioView extends FrameLayout {
ImageView iv;
TextView tv;
public void nitialize(Context context) {
inflate( context, R.layout.custom_view_futurestudio,
this );
iv = (ImageView) findViewById( R.id.custom_view_image );
tv = (TextView) findViewById( R.id.custom_view_text );
}
public FutureStudioView(Context context, AttributeSet attrs) {
super( context, attrs );
initialize( context );
}
public FutureStudioView(Context context,AttributeSet attrs,
int defStyleAttr) {
super( context, attrs, defStyleAttr );
initialize( context );
}
public void setImage(Drawable drawable) {
iv = (ImageView) findViewById( R.id.custom_view_image );
iv.setImageDrawable( drawable );
}}
转载请注明原文地址: https://ju.6miu.com/read-38480.html