Glide图片加载的使用整理

这里只整理使用方法,方便自己使用,想看详细的解析请转阅

作者: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);
image.gif

说明:

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);
image.gif

三. 缩略图

Glide.with( context )
    .load( url )
    .thumbnail( 0.2f )//参数是 float 类型,作为其倍数大小
    .into( imageView );
image.gif

说明: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 );
}
image.gif

说明: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);
image.gif
//自定义动画
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);
image.gif

五. 图片大小与裁剪

Glide.with(context)
    .load(url)
    .override(width,height)//这里的单位是px
    .into(imageView);
image.gif

说明:1.Glide提供两个方法设置图片显示方式:CenterCrop() 和 FitCenter(),作用与imageView的属性一样。

六. 图片的缓存处理

1.内存缓存

Glide.with(context)
    .load(url)
    .skipMemoryCache(true)//关闭内存缓存,默认是开启的
    .into(imageView);
image.gif

2.磁盘缓存

Glide.with(context)
    .load(url)
    .diskCacheStrategy( DiskCacheStrategy.NONE )//设置磁盘缓存的方式
    .into(imageView);
image.gif

说明:

1.Glide 不仅缓存了全尺寸的图,还会根据 ImageView 大小所生成的图也会缓存起来。

DiskCacheStrategy 的枚举意义:

DiskCacheStrategy.NONE 什么都不缓存
DiskCacheStrategy.SOURCE 只缓存全尺寸图
DiskCacheStrategy.RESULT 只缓存最终的加载图
DiskCacheStrategy.ALL 缓存所有版本图(默认行为)
image.gif

七. 图片请求的优先级

//设置 HIGH 优先级
Glide.with( context )
    .load( highPriorityImageUrl )
    .priority (Priority.HIGH )//Priority.LOW、Priority.NORMAL、Priority.HIGH、Priority.IMMEDIAT四种优先级
    .into( imageView );
image.gif

说明: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 );
image.gif
//加载视频,但只能加载本地视频
String filePath = "/storrage/emulated/0/Pictures/video.mp4";
Glide.with( context )
    .load( Uri.fromFile( new File( filePath ) ) )
    .into( imageView );
image.gif

九. Target

1.SimpleTarget

private SimpleTarget mSimpleTarget = new SimpleTarget() {
    @Override
    public void onResourceReady(Bitmap resource, GlideAnimation 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 animation) {
        mImageView.setImageBitmap(resource);
    }
};
image.gif

说明: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 glideAnimation) {
            //自定义View加载图片的方法
            this.view.setImage(resource);
        }
    };

    Glide.with(context)
            .load(mUrl)
            .into(viewTarget);
}
image.gif

十. 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);
image.gif

说明: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
    }
}
image.gif

需要在AndroidManifest.xml配置




    

        

        ...

    

    ...


image.gif

十二. 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);
image.gif

你可能感兴趣的:(Glide图片加载的使用整理)