图片加载框架Glide4的使用

图片加载框架Glide4.2的使用

1,Glide简介
Glide是Google推荐的一套快速高效的图片加载框架,作者是bumptech,功能强大且使用方便.支持图片、Gif、原生视频的加载。使用简单,可扩展性强,性能优异,Google推荐使用。目的是实现平滑的图片列表滑动效果.
Glide,滑行,滑翔,使滑行; 使滑动;

2,Glide特点
2.1链式调用,支持GIF的加载与解码
2.2对象池,原理的核心是为bitmap维护一个对象池,对象池的主要目的是通过减少大对象内存的分配以重用来提高性能
2.3生命周期绑定,图片的加载任务会与activity或者Fragment的生命周期绑定,当界面执行onStop的使用自动暂定,而当执行onStart的时候又会自动重新开启,节省电量同时Glide会对网络状态做监听,当网络状态发生改变时,会重启失败的任务,以减少任务因网络连接问题而失败的概率
2.4预览图的使用,加载视频时候,优先加载预览图,提高体验
2.5AbsListView内图片的预加载
2.6封装内存缓存,封装磁盘缓存DiskLruCache

3,使用前的配置
module\build.gradle文件配置添加依赖:

dependencies{
    compile 'com.github.bumptech.glide:glide:4.2.0'
    //开源图片转换库引用.
        implementation 'com.github.bumptech.glide:glide:4.8.0'
        annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'

implementation 'com.github.bumptech.glide:glide:4.10.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.10.0'
}

AndroidManifest添加权限:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

4,Glide中关键类方法的使用介绍

4.1,Glide方法
    清除磁盘缓存,应该在子线程中执行.
    clearDiskCache() 

    清空内存
    clearMemory()

    获取默认缓存的目录,包名/cache/image_manager_disk_cache
    static File getPhotoCacheDir(Context context)

    获取指定指定缓存的目录,包名/cache/cacheName(指定文件夹)
    static File getPhotoCacheDir(Context context, String cacheName)

    获取Glide实例.
    static Glide get(Context context)

    ArrayPool池阵列的不同类型的接口,获取该实例
    ArrayPool getArrayPool()

    获取BitmapPool对象池实例,复用大对象.
    BitmapPoolBitmapPool getBitmapPool()

    获取关联的context
    Context getContext()

    获取Registry对象,管理组件注册以扩展或替换滑动的默认加载、解码和编码逻辑。
    Registry getRegistry()

    内部方法,获取RequestManagerRetriever
    RequestManagerRetriever getRequestManagerRetriever()

    配置变化的监听
    onConfigurationChanged(Configuration newConfig)

    清除内存缓存,调用了clearMemory();
    onLowMemory()

    根据给定的级别清除确切数量的内存
    trimMemory(int level)
    
    根据给定的级别清除确切数量的内存,调用了trimMemory(level)
    onTrimMemory(int level)

    填充对象池子
    preFillBitmapPool(PreFillType.Builder... bitmapAttributeBuilders)
    MemoryCategory setMemoryCategory(MemoryCategory memoryCategory)


    设置绑定生命周期,让加载图片的请求的跟随生命周期动态管理起来
    static RequestManager with(Context context)
    static RequestManager with(Activity activity)
    static RequestManager with(FragmentActivity activity)
    static RequestManager with(android.app.Fragment fragment)
    static RequestManager with(Fragment fragment)
    static RequestManager with(View view)

4.2,RequestManager方法:
    (Glide用来管理和开始请求的类,实现了LifecycleListener接口并重写了如下方法,可以使用Activity和Fragment的生命周期事件机制的开启,停止及重启请求任务。)
    根据图片来源来加载图片.
    RequestBuilder<Drawable> load(Object model)
    RequestBuilder<ResourceType> as(Class<ResourceType> resourceClass)

    加载动态的图片的第一贞,静态展示.
    RequestBuilder<Bitmap> asBitmap()
    不同数据类型的转换.
    RequestBuilder<Drawable> asDrawable()
    RequestBuilder<File> asFile()
    RequestBuilder<GifDrawable> asGif()

    清楚加载中的view请求.
    clear(final Target<?> target)
    clear(View view)
    辅助方法加载资源,并且缓存
    RequestBuilder<File> download(Object model)
    企图加载资源到缓存中,并从缓存中读取数据.
    RequestBuilder<File> downloadOnly()

    判断当前的请求是否取消.
    boolean isPaused()

    取消正在执行的请求,以及释放已完成请求的资源。
    onDestroy()

    开始图片加载请求,一般在Activity或者Fragment的onStart方法内执行,用来重启失败或暂停的任务
    onStart()

    暂停图片加载请求,一般在Activity或Fragment的onStop方法内执行,用来暂停任务。
    onStop()

    取消正在加载的图片请求,但是已经加载完毕的图片不会被清除.
    pauseRequests()
    递归执行取消请求的操作
    pauseRequestsRecursive()

    重新开始加载还没有加载完毕的图片.
    resumeRequests()
    递归执行加载图片的请求.
    resumeRequestsRecursive()

    用给定的RequestOptions替换掉之前设置的RequestOptions.
    setDefaultRequestOptions(RequestOptions requestOptions)




4.3,RequestBuilder方法:
    使用RequestOptions定制选项来加载.
    RequestBuilder<TranscodeType> apply(RequestOptions requestOptions)

    克隆复制
    RequestBuilder<TranscodeType> clone()

    ?
    <Y extends Target<TranscodeType>> Y into(@NonNull Y target)

    加载图片失败,成功的监听!
    RequestBuilder<TranscodeType> listener(RequestListener<TranscodeType> requestListener)

    Target<TranscodeType> preload()

    Target<TranscodeType> preload(int width, int height)

    FutureTarget<TranscodeType> submit()

    FutureTarget<TranscodeType> submit(int width, int height)

    RequestBuilder<TranscodeType> thumbnail(float sizeMultiplier)

    用于加载缩略图
    RequestBuilder<TranscodeType> thumbnail(RequestBuilder<TranscodeType> thumbnailRequest)

    RequestBuilder<TranscodeType> transition(
      @NonNull TransitionOptions<?, ? super TranscodeType> transitionOptions) 

    根据图片来源来加载图片.
    RequestBuilder<TranscodeType> load(@Nullable Object model)
    RequestBuilder<TranscodeType> load(@Nullable String string)
    RequestBuilder<TranscodeType> load(@Nullable Uri uri)
    RequestBuilder<TranscodeType> load(@Nullable File file)
    RequestBuilder<TranscodeType> load(@Nullable Integer resourceId)
    RequestBuilder<TranscodeType> load(@Nullable byte[] model)
    
    获取图片加载到ImageView控件中,通常链式调用中最后调用此方法.
    Target<TranscodeType> into(ImageView view)

4.4,RequestOptions
    (用于自己来定制Glide加载图片的选项,RequestOptions一次设置之后,可以在多处使用)

    重新设置一个RequestOptions,覆盖掉原来的RequestOptions
    RequestOptions apply(RequestOptions other)

    克隆对象是可变的和不锁定,克隆后的对象没有进行锁定.
    RequestOptions autoClone()

    将图片形状进行外形转换,具体效果在Transformation类型对象中实现
    static RequestOptions bitmapTransform(Transformation<Bitmap> transformation)

    是利用图片图填充ImageView设置的大小,如果图片的尺寸小于ImageView的尺寸就会被拉伸填充
    RequestOptions centerCrop()
    static RequestOptions centerCropTransform()

    将图片缩放居中显示到ImageView中.
    RequestOptions centerInside()
    static RequestOptions centerInsideTransform()

    以图片为中心为圆心将将矩形的图片转换成圆形的图片
    RequestOptions circleCrop()
    static RequestOptions circleCropTransform()

    复制一份包含所有已经设置的属性的RequestOptions
    RequestOptions clone()

    解码,
    RequestOptions decode(Class<?> resourceClass)
    static RequestOptions decodeTypeOf(@NonNull Class<?> resourceClass)
    RequestOptions disallowHardwareConfig()
     
    设置缓存方式或者缓存的策略,
    ALL,缓存所有版本的图像(默认行为)
    AUTOMATIC,自动的
    DATA,仅仅只缓存原来的全分辨率的图像(在解码之前将已检索的数据直接写入磁盘缓存。)
    NONE,什么都不缓存
    RESOURCE,仅仅缓存最终的图像,即降低分辨率后的(或者是转换后的)(在解码之后将已检索的数据直接写入磁盘缓存。)
    RequestOptions diskCacheStrategy(DiskCacheStrategy strategy)
    static RequestOptions diskCacheStrategyOf(DiskCacheStrategy diskCacheStrategy)

    不要动画,进制返回动画资源
    RequestOptions dontAnimate()

    不要转换,删除所有应用的的连接转换.
    RequestOptions dontTransform()

    设置使用bitmap的解码策略.
    FIT_CENTER
    CENTER_OUTSIDE
    AT_LEAST
    AT_MOST
    CENTER_INSIDE
    NONE
    DEFAULT,CENTER_OUTSIDE
    RequestOptions downsample(DownsampleStrategy strategy)
    static RequestOptions downsampleOf(DownsampleStrategy strategy)

    Sets the value for key
    RequestOptions encodeFormat(Bitmap.CompressFormat format)
    static RequestOptions encodeFormatOf(Bitmap.CompressFormat format)

    Sets the value for key
    RequestOptions encodeQuality(int quality)
    static RequestOptions encodeQualityOf(int quality)

    设置加载图片失败后的占位图.
    RequestOptions error(int resourceId)
    RequestOptions error(@Nullable Drawable drawable)
    static RequestOptions errorOf(@Nullable Drawable errorDrawable)
    static RequestOptions errorOf(int errorId)

    设置加载图片时候发生空指针,或者传入参数为null的时候,显示的占位图.
    RequestOptions fallback(Drawable drawable)
    RequestOptions fallback(int resourceId)
    
    缩放图像让图像都测量出来等于或小于 ImageView 的边界范围,该图像将会完全显示,但可能不会填满整个ImageView
    RequestOptions fitCenter()
    static RequestOptions fitCenterTransform()

    RequestOptions format(@NonNull DecodeFormat format)
    static RequestOptions formatOf(@NonNull DecodeFormat format)

    RequestOptions frame(long frameTimeMicros)
    static RequestOptions frameOf(long frameTimeMicros)

    DiskCacheStrategy getDiskCacheStrategy()

    获取对应的属性字段值
    int getErrorId()
    Drawable getErrorPlaceholder()
    Drawable getFallbackDrawable()
    int getFallbackId()
    
    boolean getOnlyRetrieveFromCache()
    Options getOptions()
    getOverrideHeight()
    int getOverrideWidth()
    boolean isValidOverride()
    
    RequestOptions lock()

    static RequestOptions noAnimation()
    static RequestOptions noTransformation()
    RequestOptions onlyRetrieveFromCache(boolean flag)
    static <T> RequestOptions option(@NonNull Option<T> option, @NonNull T value)
    RequestOptions optionalCenterCrop()
    RequestOptions optionalCenterInside()
    RequestOptions optionalCircleCrop()
    RequestOptions optionalFitCenter()
    RequestOptions optionalTransform(Class<T> resourceClass,
  Transformation<T> transformation)

    RequestOptions optionalTransform(Transformation<Bitmap> transformation)
    RequestOptions override(int size)
    修改加载成功后网络图片的宽度和高度,参数1:修改后的宽度,参数2:修改后的高度.
    RequestOptions override(int width, int height)
    static RequestOptions overrideOf(int size)
    static RequestOptions overrideOf(int width, int height)

    设置加载过程中默认占位图.
    RequestOptions placeholder(@Nullable Drawable drawable)
    RequestOptions placeholder(int resourceId)
    static RequestOptions placeholderOf(@Nullable Drawable placeholder)
    static RequestOptions placeholderOf(int placeholderId)
    
    
    设置加载图片优先级,IMMEDIATE > HIGH > NORMAL > LOW
    RequestOptions priority(Priority priority)
    static RequestOptions priorityOf(@NonNull Priority priority)

    RequestOptions set(@NonNull Option<T> option, @NonNull T value)
    RequestOptions signature(@NonNull Key signature)
    static RequestOptions signatureOf(@NonNull Key signature)
    RequestOptions sizeMultiplier(float sizeMultiplier)
    static RequestOptions sizeMultiplierOf(float sizeMultiplier)

    设置是否进行内存缓存,true:不缓存,反之缓存
    RequestOptions skipMemoryCache(boolean skip)
    static RequestOptions skipMemoryCacheOf(boolean skipMemoryCache)

    RequestOptions theme(Resources.Theme theme)
    RequestOptions timeout(int timeoutMs)
    static RequestOptions timeoutOf(int timeout)

    RequestOptions transform(
  Class<T> resourceClass, Transformation<T> transformation) {
if (isAutoCloneEnabled)

RequestOptions transform(@NonNull Transformation<Bitmap> transformation)
RequestOptions transforms(@NonNull Transformation<Bitmap>... transformations)
RequestOptions useUnlimitedSourceGeneratorsPool(boolean flag)

5,功能使用案例
1,加载网络图片一般用法
//默认使用原图加载,内存缓存,磁盘缓存,
Glide.with(this).load(UC.IMAGE_URL_0).into(iv);
2,加载网络图片过程中的监听
3,加载图片ID占位图
4,加载图片过程中遇到传入null的监听
5,调整图片大小
单位是像素,裁剪你的图片大小。其实Glide已经会自动根据你mageView裁剪照片来放在缓存中了。
6,图片的缩放处理.
使用centerCrop是利用图片图填充ImageView设置的大小,如果ImageView的Height是match_parent则图片就会被拉伸填充
使用fitCenter即缩放图像让图像都测量出来等于或小于 ImageView 的边界范围,该图像将会完全显示,但可能不会填满整个ImageView
将图片居中缩放展示到ImageView当中.

6,Glide图片缓存处理
用过手机的都知道,当划上划下一个ListView的时候,第二次都比第一次快,就是因为为GlideView对资源进行了缓存,而且封装的很好,甚至不需要自己去设定缓存大小,
Glide会智能地自己给我们根据设备设置缓存大小。
要想性能好,怎可以不用缓存。缓存就是为了减少或者杜绝多的网络请求。为了避免缓存,Glide用了内存缓存和‘外存缓存机制’,并且 提供了相应的方法,完全封装,不需要处理细节。
Glide会自动缓存到内存,除非调用.
skipMemoryCache(true)。尽管调用了这个,Glide还是会缓存到外存,还有一种情形,就是有一张图片,但是这张图变化非常快,
这个时候可能并不想缓存到外存中,就使用.diskCacheStrategy( DiskCacheStrategy.NONE )。
如果你两种都不需要,可以两个方法组合着一起使用。
7,Glide加载自定义的形状的图片.
通过 RequestOptions transform(@NonNull Transformation<Bitmap> transformation)方法来转换图形.
BitmapTransformation
CenterInside
RoundedCorners
FitCenter
CircleCrop
CenterCrop
也可以通过开源库,接入各种其他类型的形状转换!

TransitionOptions
crossFade()
animate()

        GenericTransitionOptions
        DrawableTransitionOptions
        BitmapTransitionOptions

Transitions被要求用在 RequestBuilder
实例:
Glide.with(fragment)
    .load(url)
    .transition(withCrossFade(R.anim.fade_in, 300));

Glide.with(this)
        .load(ImageConfig.URL_WEBP)
        .apply(options)
        .transition(new DrawableTransitionOptions().crossFade(2000))
        .thumbnail(Glide.with(this)
                .load(ImageConfig.URL_JPEG))
        .into(iv_test1);

GlideDemo

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354

推荐阅读更多精彩内容