Glide

作者: HOLLE_karry | 来源:发表于2020-05-08 11:30 被阅读0次

1.概述

刚才有说到,有些朋友觉得Glide 4相对于Glide 3改动非常大,其实不然。之所以大家会有这种错觉,是因为你将Glide 3的用法直接搬到Glide 4中去使用,结果IDE全面报错,然后大家可能就觉得Glide 4的用法完全变掉了。

其实Glide 4相对于Glide 3的变动并不大,只是你还没有了解它的变动规则而已。一旦你掌握了Glide 4的变动规则之后,你会发现大多数Glide 3的用法放到Glide 4上都还是通用的。

我对Glide 4进行了一个大概的研究之后,发现Glide 4并不能算是有什么突破性的升级,而更多是一些API工整方面的优化。相比于Glide 3的API,Glide 4进行了更加科学合理地调整,使得易读性、易写性、可扩展性等方面都有了不错的提升。但如果你已经对Glide 3非常熟悉的话,并不是就必须要切换到Glide 4上来,因为Glide 4上能实现的功能Glide 3也都能实现,而且Glide 4在性能方面也并没有什么提升。

但是对于新接触Glide的朋友而言,那就没必要再去学习Glide 3了,直接上手Glide 4就是最佳的选择了。

好了,对Glide 4进行一个基本的概述之后,接下来我们就要正式开始学习它的用法了。刚才我已经说了,Glide 4的用法相对于Glide 3其实改动并不大。在前面的七篇文章中,我们已经学习了Glide 3的基本用法、缓存机制、回调与监听、图片变换、自定义模块等用法,那么今天这篇文章的目标就很简单了,就是要掌握如何在Glide 4上实现之前所学习过的所有功能,那么我们现在就开始吧。

2.使用

⑴依赖
implementation 'com.github.bumptech.glide:glide:4.9.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
⑵加载图片到imageView
Glide.with(context).load(url).into(iv);
⑶属性
RequestOptions options = new RequestOptions()
                .circleCrop()//圆形图片
                .placeholder(R.drawable.ic_launcher_background)//占位图,在图片加载回来之前,使用本地图片占着位置
                .error(R.mipmap.ic_launcher)//加载图片失败的时候使用的图片
                .override(300,300)//指定加载图片的大小
                .diskCacheStrategy(DiskCacheStrategy.NONE)//sd卡的缓存,缓存策略
                .transform(new RoundedCorners(100))//圆角设置
                .transform(new BlurTransformation())//高斯模糊
                .transform(new GrayscaleTransformation());//黑白化处理
⑷into()方法

在init()使用SimpleTarget,可以将网络链接变成一个Drawable

Glide.with(this).load(url).into(new SimpleTarget<Drawable>() {
            @Override
            public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
                iv.setImageDrawable(resource);
            }
        });
⑸preload()方法
Glide.with(this)
     .load("http://guolin.tech/book.png")
     .preload();
⑹submit()方法
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();
}
⑺listener()方法
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);
⑻自定义模块

•原来3.x MyAppGlideModule这个类需要在清单文件配置,4.x 不需要,直接添加注解@GlideModule
•ExternalCacheDiskCacheFactory的默认缓存路径是在sdcard/Android/data/包名/cache/我的图片
•一般在SD卡读写权限需要动态申请权限,但是这里不需要处理权限,
因为Android/data/包名/cache/这个目录google专门留出来,给各个app缓存数据

@GlideModule
public class MyAppGlideModule extends AppGlideModule {
    @Override
    public void applyOptions(Context context, GlideBuilder builder) {
        builder.setDiskCache(new ExternalPreferredCacheDiskCacheFactory(
                context,"我的图片",1024*1024*500));
    }
    @Override
    public void registerComponents(Context context, Glide glide, Registry registry) {
    }
}

相关文章

网友评论

      本文标题:Glide

      本文链接:https://www.haomeiwen.com/subject/hdoxnhtx.html