Glide开源库


引用项目
compile 'com.github.bumptech.glide:glide:3.7.0'

基本用法

1、加载图片
    加载网络地址url值为 "http://img15.3lian.com/2015/f2/50/d/71.jpg"的图片,
Glide.with(this)
        .load(url)
        .into(image);
    加载应用中的资源图片,
Glide.with(this)
        .load(R.drawable.big_imag)
        .into(image);
    当然,可加载的资源类型不仅仅这两个,Glide的load方法提供了多种类型,根据实际情况使用,具体如下图,

2、加载过程显示和错误显示图片
    由于网络、图片资源大小等原因,可能导致加载时间较长,为了提高用户体验,可以在等待过程中显示一个默认图片,Glide提供了placeholde方法实现该功能,
Glide.with(this)
        .load(url)
        .placeholder(R.drawable.default_pic)
        .into(image);
    当然,也有可能加载失败,可以显示加载失败后的图片,Glide提供了 error方法实现该功能,
Glide.with(this)
        .load(url)
        .error(R.drawable.error_pic)
        .into(image);
3、缓存策略
    DiskCacheStrategy.NONE 什么都不缓存
    DiskCacheStrategy.SOURCE 仅仅只缓存原来的全分辨率的图像
    DiskCacheStrategy.RESULT 仅仅缓存最终的图像,即降低分辨率后的(或者是转换后的)
    DiskCacheStrategy.ALL 缓存所有版本的图像
    Glide提供了四种缓存策略,NONE就不说了,SOURCE仅缓存原图片,第一次加载会下载然后缓存,下次用到该资源的时候直接读取缓存文件;RESULT缓存最终使用的图像,也就是说可能缓存多次,比如有两个Image控件,一个100*100,另一个200*200,虽然获取的是同一个网络资源,但缓存时会根据各自的大小进行缓存,即下载两次,缓存两次,那么如何避免多次下载呢?ALL策略可以解决这个问题,该策略在第一次加载时会将原图片缓存,大小不同的控件加载时先从缓存中读取原文件,然后根据自身大小进行缓存,下次使用时就不用先读取原文件了,其实就是空间换时间。
    Glide默认使用RESULT,可以根据自身需求设置缓存策略。
Glide.with(this)
        .load(url)
        .diskCacheStrategy(DiskCacheStrategy.ALL)
        .into(image);
4、图片缩放
    centerCrop,填充ImageView设置的大小,图片可能被拉伸填充。
Glide.with(this)
        .load(url)
        .centerCrop()
        .into(image);
    fitCenter,缩放图像让图等于或小于ImageView的边界范围,图像将会完全显示,但可能不会填满整个ImageView。
Glide.with(this)
        .load(url)
        .fitCenter()
        .into(image);

5、显示gif和视频
    除了可以显示静态的图片外,还可以显示gif、本地视频,
Glide.with(this)
        .load(R.drawable.mygif)
        .asGif()
        .placeholder(R.drawable.default_pic)
        .into(image);
String path = "sdcard/congo.mp4";
Glide.with(this)
        .load(Uri.fromFile(new File(path)))
        .placeholder(R.drawable.default_pic)
        .into(image);
6、清除缓存
        clearDiskCache--清除硬盘缓存
        clearMemory--清除内存缓存
需要注意的是,clearDiskCache不能再UI线程中执行。

全局配置

1、实现GlideModel接口自定义全局配置
public class GlideConfiguration implements GlideModule {

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

    }

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

    }
}
     混淆配置
-keepnames class com.demo.glidedemo.GlideConfiguration
# or more generally:
#-keep public class * implements com.bumptech.glide.module.GlideModule

# for DexGuard only
-keepresourcexmlelements manifest/application/meta-data@value=GlideModule
     注册
<meta-data
    android:name="com.demo.glidedemo.GlideConfiguration"
    android:value="GlideModule" />
2、图片格式
    Glide的默认Bitmap格式为RGB_565,占用内存为小一些,但是会损失图片质量,如果对这种格式的显示效果不满意,可以配置成ARGB_8888,
    builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);
3、硬盘缓存
    Glide中用setDiskCache方法设置硬盘缓存的路径和大小,默认使用InternalCacheDiskCacheFactory类来创建硬盘缓存,缓存文件放在应用自身缓存目录下,其他应用无法读取,默认缓存最大值为250M。当然也可以自己定义内部缓存目录和缓存大小,如,
    builder.setDiskCache(new InternalCacheDiskCacheFactory(context, "glide", cacheSize));
    ExternalCacheDiskCacheFactory可用来创建应用外部缓存目录和大小,
    builder.setDiskCache(new ExternalCacheDiskCacheFactory(context, "glide", cacheSize));
    使用上面两个类配置硬盘缓存,基本路径是固定的,如果想要完全自己定以缓存目录,可以使用 DiskLruCacheFactory 来构建,有多个构造方法,
builder.setDiskCache(new DiskLruCacheFactory(cacheDir, cacheSize));
builder.setDiskCache(new DiskLruCacheFactory(cacheDir, "glide", cacheSize));
builder.setDiskCache(new DiskLruCacheFactory(new DiskLruCacheFactory.CacheDirectoryGetter() {
    @Override public File getCacheDirectory() {
        return new File(cacheDir);
    }
}, cacheSize));
    如果想完全控制缓存的构建,可以实现 DiskCache. Factory 接口,
builder.setDiskCache(new DiskCache.Factory() {
    @Override
    public DiskCache build() {
        File cacheLocation = new File(cacheDir);
        cacheLocation.mkdirs();
        return DiskLruCacheWrapper.get(cacheLocation, cacheSize);
    }
});
4、内存缓存
    GlideBuilder当中,允许开发者去设置内存当中图片缓存区的大小,通过实现Glide的MemoryCache和BitmapPool。
    默认大小由MemorySizeCalculator类来计算出合适的缓存大小,
MemorySizeCalculator calculator = new MemorySizeCalculator(context);
int defaultMemoryCacheSize = calculator.getMemoryCacheSize();
int defaultBitmapPoolSize = calculator.getBitmapPoolSize();
    如果在应用当中想要调整内存缓存的大小,开发者可以通过如下方式:
    Glide.get(context).setMemoryCategory(MemoryCategory.HIGH);
    Glide内存缓存的目的是减少I/O,提高效率 ,可以通过GlideBuidler的 setMemoryCache(MemoryCache memoryCache) 去设置缓存的大小,开发者可以通过LruResourceCache去设置缓存区的大小,
new GlideBuilder(context).setMemoryCache(new LruResourceCache(yourSizeInBytes));
    可以通过GlideBuilder的setBitmapPool()方法设置池子的大小,LruBitmapPool是Glide的默认实现,使用如下:
    new GlideBuilder(context).setBitmapPool(new LruBitmapPool(sizeInBytes));
     一般内存缓存用默认的就可以,尽量不要自己去定义。

自定义Target

1、SimpleTarget
    如果简单地加载一个Bitmap,可以通过以下简单的方式而不是直接地显示给用户,可能是显示一个notification,或者上传一个头像,Glide都能很好地实现。
    SimpleTarget提供了对Target的简单实现,并且让你专注于对加载结果的处理 。使用SimpleTarget,开发者需要提供一个宽和高的像素值,用来加载你的资源文件,并且你需要去实现。
private void showSimpleTarget() {
    SimpleTarget simpleTarget = new SimpleTarget<Bitmap>(250, 250) {
        @Override
        public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
            image.setImageBitmap(resource);
        }
    };
    Glide.with(this)
            .load(url)
            .asBitmap()
            .into(simpleTarget);
}
2、ViewTarget
    我们不能直接使用ImageView的原因可能是多种多样的,刚才展示如何去接收一个 Bitmap,现在我们要更进一步。假设你有一个自定义View,Glide并不支持加载图片到自定义view中,Glide可以用ViewTarget来实现,
private void showViewTarget() {
    ViewTarget<MyView, GlideDrawable> viewTarget = new ViewTarget<MyView, GlideDrawable>(myview) {
        @Override
        public void onResourceReady(GlideDrawable resource, GlideAnimation<? super GlideDrawable> glideAnimation) {
            this.view.setImage(resource.getCurrent());
        }
    };
    Glide.with(this)
            .load(url)
            .into(viewTarget);
}

集成网络栈

Volley
    1、添加依赖
// Glide's Volley Integration
compile 'com.github.bumptech.glide:volley-integration:1.3.1@aar'
compile 'com.mcxiaoke.volley:library:1.0.8'
    2、混淆
-keep class com.bumptech.glide.integration.volley.VolleyGlideModule
#or
-keep public class * implements com.bumptech.glide.module.GlideModule

OkHttp3
    1、添加依赖
// Glide's OkHttp Integration
compile 'com.github.bumptech.glide:okhttp3-integration:1.4.0@aar'
compile 'com.squareup.okhttp3:okhttp:3.4.1'
    2、混淆
-keep class com.bumptech.glide.integration.okhttp3.OkHttpGlideModule


网上一个比较详细的系列文章, 写的不错,

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值