一、引入项目
添加依赖
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( imageViewGif );
讯享网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,只能是本地
讯享网Glide.with( context ).load( Uri.fromFile( new File( filePath ) ) ).into( imageViewGifAsBitmap );String filePath = "/storage/emulated/0/Pictures/example_video.mp4"
⑦在上面这些等价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 只缓存最高解析图的image
- DiskCacheStrategy.RESULT 缓存最后一次那个image,比如有可能你对image做了转化
- DiskCacheStrategy.ALL image的所有版本都会缓存
讯享网
Glide.with( context ).load( image ) .diskCacheStrategy( DiskCacheStrategy.SOURCE ) .into( imageViewFile );请求优先级
加载图片肯定也是有先后顺序,Glide提供了.request().request()这个方法,它接收以下几个参数: - Priority.LOW
- Priority.NORMAL
- Priority.HIGH
- Priority.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://51itzy.com/kjqy/63245.html