Glid简单使用(一)

Glid简单使用(一)一 引入项目 添加依赖 dependencies compile com github bumptech glide glide 3 5 2 compile com android support support v4 22 0 0 二 最简单加载图片 Glide

大家好,我是讯享网,很高兴认识大家。

一、引入项目

添加依赖

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,只能是本地

 
讯享网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 只缓存最高解析图的image
  • DiskCacheStrategy.RESULT 缓存最后一次那个image,比如有可能你对image做了转化
  • DiskCacheStrategy.ALL image的所有版本都会缓存
    讯享网Glide.with( context ).load( image ) .diskCacheStrategy( DiskCacheStrategy.SOURCE ) .into( imageViewFile );

    请求优先级.request()

    加载图片肯定也是有先后顺序,Glide提供了.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 );}

注意事项:

  1. 上面这段代码不要写成匿名内部类的机制,原因就是java的自动垃圾回收机制可能在图片还没有加载好的时候就已经把你的Target回收了。
  2. 注意.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 ); }}

讯享网  

小讯
上一篇 2025-01-11 08:30
下一篇 2025-01-25 12:25

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/63245.html