Glide 4.x和3.x区别和使用介绍

基础使用

添加4.x版本的依赖

implementation 'com.github.bumptech.glide:glide:4.4.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.4.0'

相比于Glide 3,这里要多添加一个compiler的库,这个库是用于生成Generated API的。
使用:

RequestOptions options = new RequestOptions()
        .placeholder(R.drawable.loading)     //占位图
	.error(R.drawable.error)	   //异常占位图   
	..override(200, 100)
	.diskCacheStrategy(DiskCacheStrategy.NONE);//不进行磁盘缓存
Glide.with(this)
     .load(url)
     .apply(options)
     .into(imageView);

相比于Glide 3.x,这个版本的主要变化是,将配置全部设置到了一个RequestOptions里面,并使用apply方法,应用这些配置信息。

缓存策略

Glide 4.x版本的缓存选项,有下面5种:
DiskCacheStrategy.NONE: 表示不缓存任何内容。
DiskCacheStrategy.DATA: 表示只缓存原始图片。
DiskCacheStrategy.RESOURCE: 表示只缓存转换过后的图片。
DiskCacheStrategy.ALL : 表示既缓存原始图片,也缓存转换过后的图片。
DiskCacheStrategy.AUTOMATIC: 表示让Glide根据图片资源智能地选择使用哪一种缓存策略(默认选项)。

Glide 3中的语法是先load()再asBitmap()的,而在Glide 4中是先asBitmap()再load()的

Glide 4中又新增了asFile()方法和asDrawable()方法,分别用于强制指定文件格式的加载和Drawable格式的加载

Glide 4中又新增了submit()/submit(int width, int height)方法,这个方法其实就是对应的Glide 3中的downloadOnly()方法

public void downloadImage() {
    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                String url = "http://www.guolin.tech/book.png";
                final Context context = getApplicationContext();
                FutureTarget<File> target = Glide.with(context)
                        .asFile()
                        .load(url)
                        .submit();
                final File imageFile = target.get();
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(context, imageFile.getPath(), Toast.LENGTH_LONG).show();
                    }
                });
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }).start();
}

图片转换

Glide 4.x还提供了现成的图片转换的API:

RequestOptions options = new RequestOptions()
        .centerCrop();

RequestOptions options = new RequestOptions()
        .fitCenter();

RequestOptions options = new RequestOptions()
        .circleCrop();

方便进行图片转换,如果需要使用一些特殊转换,需要调用

RequestOptions options = new RequestOptions()
        .transform();

配合下面这个库:

dependencies {
    implementation 'jp.wasabeef:glide-transformations:3.0.1'
}

就可以进行方便的进行图片转换。使用示例如下:

String url = "https://up.sc.enterdesk.com/edpic/cf/3e/84/cf3e8415383e065b0fe8938f73bedf70.jpg";
RequestOptions options = new RequestOptions()
        .transforms(new BlurTransformation(), new GrayscaleTransformation());
Glide.with(this)
     .load(url)
     .apply(options)
     .into(imageView);

GlideApp

Generated API是Glide 4中全新引入的一个功能,它的工作原理是使用注解处理器 (Annotation Processor) 来生成出一个API,在Application模块中可使用该流式API一次性调用到RequestBuilder,RequestOptions和集成库中所有的选项,简单说,就是Glide 4仍然给我们提供了一套和Glide 3一模一样的流式API接口,照顾老版本的用户的使用习惯。只不过需要把Glide关键字替换成GlideApp关键字,如下所示:

GlideApp.with(this)
        .load(url)
        .placeholder(R.drawable.loading)
        .error(R.drawable.error)
        .skipMemoryCache(true)
        .diskCacheStrategy(DiskCacheStrategy.NONE)
        .override(Target.SIZE_ORIGINAL)
        .circleCrop()
        .into(imageView);

不过,有可能你的IDE中会提示找不到GlideApp这个类。这个类是通过编译时注解自动生成的,但是要先先准备代码中,有一个自定义的模块,并给这个模块加上 @GlideModule 注解。如下所示:

@GlideModule
public class MyAppGlideModule extends AppGlideModule {

    @Override
    public void applyOptions(Context context, GlideBuilder builder) {

    }

    @Override
    public void registerComponents(Context context, Glide glide, Registry registry) {

    }

}

然后在Android Studio中点击菜单栏Build -> Rebuild Project,GlideApp这个类就会自动生成了。

自定义API

下面我来具体举个例子,比如说我们要求项目中所有图片的缓存策略全部都要缓存原始图片,那么每次在使用Glide加载图片的时候,都去指定diskCacheStrategy(DiskCacheStrategy.DATA)这么长长的一串代码,确实是让人比较心烦。这种情况我们就可以去定制一个自己的API了,定制自己的API需要借助 @GlideExtension 和 @GlideOption这两个注解。创建一个我们自定义的扩展类,代码如下所示:

@GlideExtension
public class MyGlideExtension {

    private MyGlideExtension() {

    }

    @GlideOption
    public static void cacheSource(RequestOptions options) {
        options.diskCacheStrategy(DiskCacheStrategy.DATA);
    }

}

这里我们定义了一个MyGlideExtension类,并且给加上了一个 @GlideExtension注解,然后要将这个类的构造函数声明成private,这都是必须要求的写法。接下来就可以开始自定义API了,这里我们定义了一个cacheSource()方法,表示只缓存原始图片,并给这个方法加上了 @GlideOption注解。注意自定义API的方法都必须是静态方法,而且第一个参数必须是RequestOptions,后面你可以加入任意多个你想自定义的参数。在cacheSource()方法中,我们仍然还是调用的diskCacheStrategy(DiskCacheStrategy.DATA)方法,所以说cacheSource()就是
一层简化API的封装而已。然后在Android Studio中点击菜单栏Build -> Rebuild Project,神奇的事情就会发生了,你会发现你已经可以使用这样的语句来加载图片了:

GlideApp.with(this)
        .load(url)
        .cacheSource()
        .into(imageView);





参考:
Android图片加载框架最全解析(八),带你全面了解Glide 4的用法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值