Android开发

Android源码系列-解密Glide

本文主要是介绍Android源码系列-解密Glide,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Glide是什么?

Glide是一个Android的图片加载和缓存库,它主要专注于大量图片的流畅加载。是google所推荐的图片加载库,作者是bumptech。这个库被广泛运用在google的开源项目中,包括2014年的google I/O大会上发布的官方App。

简介

WIKI地址:WIKI官网

Github地址:Github

特点

1、多样化媒体加载

Glide 不仅是一个图片缓存,它支持 Gif、WebP等格式

2、生命周期集成

我们可以更加高效的使用Glide提供的方式进行绑定,这样可以更好的让加载图片的请求的生命周期动态管理起来

3、高效的缓存策略

  • 支持Memory和Disk图片缓存
  • 根据 ImageView 的大小来缓存相应大小的图片尺寸
  • 内存开销小,默认的 Bitmap 格式是 RGB_565 格式(3.X版本),4.7.1版本默认格式为(PREFER_ARGB_8888_DISALLOW_HARDWARE)
  • 使用BitmapPool进行Bitmap的复用

4、 提供丰富的图片转换Api,支持圆形裁剪、平滑显示等特性

Glide怎么用?

1、gradle引入库,implementation 'com.github.bumptech.glide:glide:4.7.1'

2、配置Glide的with load apply into等方法

 public void loadImageView(ImageView view,String url){
       //属性的配置
       RequestOptions options = new RequestOptions()
               //加载成功之前占位图
               .placeholder(R.mipmap.ic_launcher)
               //加载错误之后的错误图
               .error(R.mipmap.ic_launcher)
               //指定图片的尺寸
               .override(1000,800)
               //指定图片的缩放类型为fitCenter (等比例缩放图片,宽或者是高等于ImageView的宽或者是高。)
               .fitCenter()
               //指定图片的缩放类型为centerCrop (等比例缩放图片,直到图片的狂高都大于等于ImageView的宽度,然后截取中间的显示。)
               .centerCrop()
               .circleCrop()//指定图片的缩放类型为centerCrop (圆形)
               //跳过内存缓存
               .skipMemoryCache(true)
               //缓存所有版本的图像
               .diskCacheStrategy(DiskCacheStrategy.ALL)
               //跳过磁盘缓存
               .diskCacheStrategy(DiskCacheStrategy.NONE)
               //只缓存原来分辨率的图片
               .diskCacheStrategy(DiskCacheStrategy.DATA)
               //只缓存最终的图片
               .diskCacheStrategy(DiskCacheStrategy.RESOURCE)
               .priority(Priority.HIGH)
               ;
       //加载图片
       Glide.with(getApplicationContext())
               .load(url)
               .apply(options)
               .into(view);
   }
   
复制代码

3、执行ImageView的加载

 loadImageView(ivPic,"http://b.hiphotos.baidu.com/image/pic/item/d52a2834349b033bda94010519ce36d3d439bdd5.jpg");
 
复制代码

详细的使用教程及option的配置,推荐参考

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

Glide核心执行流程是怎样?

基础概念

类型 说明
Data 代表原始的,未修改过的资源,对应dataClass
Resource 修改过的资源,对应resourceClass
Transcoder 资源转换器,比如BitmapBytesTranscoder(Bitmap转换为Bytes),GifDrawableBytesTranscoder
ResourceEncoder 持久化数据的接口,注意,该类并不与decoder相对应,而是用于本地缓存的接口
ResourceDecoder 数据解码器,比如ByteBufferGifDecoder(将ByteBuffer转换为Gif),StreamBitmapDecoder(Stream转换为Bitmap)
ResourceTranscoder 资源转换器,将给定的资源类型,转换为另一种资源类型,比如将Bitmap转换为Drawable,Bitmap转换为Bytes
Transformation 比如对图片进行FitCenter,CircleCrop,CenterCrop的transformation,或者根据给定宽高对Bitmap进行处理的BitmapDrawableTransformation
Target request的载体,各种资源对应的加载类,含有生命周期的回调方法,方便开发人员进行相应的准备以及资源回收工作

总体设计

image

1、构建Request,实现类为SingleRequest,用于发起一个加载的请求

这篇关于Android源码系列-解密Glide的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!