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

作者: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<String> 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<Bitmap> mSimpleTarget = new SimpleTarget<Bitmap>() {
    @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<Bitmap> mSimpleTarget = new SimpleTarget<Bitmap>(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<CustomView,GlideDrawable>( 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配置

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.mrtrying.demoglide">

    <application>

        <meta-data
            android:name="com.mrtrying.demoglide.module.ExampleModule"
            android:value="GlideModule" />

        ...

    </application>

    ...

</manifest>

 

十二.  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<Drawable>() { 
         @Override 
         public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) { 
             return false; 
         } 

         @Override 
         public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) { 
             return false; 
         } 
     }) 
     .into(imageView);

 

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐