【Android 从入门到放弃】Glide(4.0 RC版) 的使用01

来源:互联网 发布:城市大数据专业委员会 编辑:程序博客网 时间:2024/05/16 08:36

前言

有段时间没做 Android 开发了,目前一直在从事 JavaWeb 相关工作。最近打算做一款 Android 应用,在使用 Glide 的时候,发现 Glide已经升级到 4.0 RC版了。虽然之前整理过 Glide 的使用,4.0 RC版还是有不少区别的,所以抽时间重新整理下。
关于版本简单说明下,目前Glide 4.0版本是由Google的各种团队内部使用,4.0被认为是内部稳定的。但外部用户可能会发现内部尚未发现的问题。因此,将此作为RC发布。如果没有发现稳定性或API中的重大问题,预计不久之后就会发布非RC版本。


Glide 简介

Glide是一个面向Android快速和高效的开源媒体管理(open source media management )和图片加载(image loading )的框架,使用指定的接口很容易在一个案例中实现媒体解码(media decoding),内存(memory)和磁盘缓存(disk caching),资源池(resource pooling)的功能。
Glide支视三种类型的资源:视频,图片,动画GIF,对其进行获取,解码,显示操作。Glide拥有灵活的API,允许开发人员自定义添加网络堆栈(Network stack)。Glide默认使用HttpUrlConnection的网络堆栈,也可以使用Google的Volley库和Squareas的OkHttp库来替代。
Glide的主要重点是平滑和快速的滚动任何类型的图像列表。同时,Glide也高效的适用于这些情况,例如:获取,调整大小,显示远程图像。

github地址:
https://github.com/bumptech/glide

doc地址:
http://sjudd.github.io/glide/

Glide 配置

1. 在Gradle中引入

dependencies {    compile 'com.github.bumptech.glide:glide:4.0.0-RC1'    annotationProcessor 'com.github.bumptech.glide:compiler:4.0.0-RC1'}

2. 在proguard中添加混淆规则

-keep public class * implements com.bumptech.glide.module.GlideModule-keep public class * extends com.bumptech.glide.AppGlideModule-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {    **[] $VALUES;    public *;}

小试牛刀

使用Glide加载图片是很容易的,在很多情况下只需要一行代码。

Glide.with(this).load(IMG_URL).into(testIv1);//如果加载网络图片,记得添加权限哦~

V3 到 V4 的改变

Glide V4变化较大的是库处理选项的方式。在Glide v3中,选项是由一系列复杂的多类型构建器单独处理的。在Glide v4中,这些已被具有单一类型的单个构建器和可以提供给构建器的一系列选项的对象所替代。Glide 生成的API通过将选项对象和任何包含的集成库与构建器的选项合并,来创建单个流畅的API。
可以简单理解为,Glide v4 将Glide V3中Glide.with()实现的一系列复杂功能拆分成一些独立的API。大体上说,以下几个方面是全新功能。

Options    RequestBuilder    RequestOptions    TransitionOptions    Generated APITypes and Targets    Picking Resource Types    Drawables    Targets        CancellationConfiguration    Applications    Libraries    Manifest parsing

RequestOptions

RequestOptions请求设置,V4 已经将大多数的设置已经放到了RequestOptions对象中。包括:

  • Placeholders 占位图片
  • Transformations 变换的操作
  • Caching Strategies 缓存策略
  • Component specific options, like encode quality, or decode Bitmap configurations. 其他设置,如编码质量、Bitmap配置等。

1. RequestOptions对象的创建

RequestOptions myOptions = new RequestOptions();//后面可以链式操作

2. Placeholders 占位图片
2.1. placeholder
设置加载中的图片。当请求资源的过程中,加载中的图片会被显示。当资源请求成功后,加载中的图片会被请求的资源替换掉。如果请求的是内存资源,加载中的图片可能永远无法被显示。如果请求失败,而error图片没有被设置,那么加载中的图片将会一直被显示。或者url为null,而fallback图片没有被设置,那么加载中的图片也将会一直被显示。

 placeholder(R.drawable.placeholder) //或者 placeholder(new ColorDrawable(Color.BLACK))

2.2. error
当请求失败的时候,error资源被显示。又或者url为null,而fallback图片没有被设置,那么加载中的图片也将会一直被显示。

 error(R.drawable.error) //或者 error(new ColorDrawable(Color.RED))

2.3. fallback
当url为空的时候,fallback图片被显示。

 fallback(R.drawable.fallback) //或者 fallback(new ColorDrawable(Color.GREY))

3. Transformations 变换的操作
比如设置圆角图片

transform(new CircleCrop())

4. 设置尺寸及填充方式
3.1 override(width, height)
设置图片尺寸,当ImageView为wrap尺寸时有效
3.2 centerCrop()
拉伸截取中间部分显示
3.3 fitCenter()
等比拉伸填满ImageView

5. RequestOptions对象的创建后,可以被RequstBuilder多次使用,通过apply()方法调用。

RequestOptions requestOptions = new RequestOptions()        .placeholder(R.mipmap.placeholder) //加载中图片        .error(R.mipmap.error) //加载失败图片        .fallback(R.mipmap.fallback) //url为空图片        .centerCrop() // 填充方式        .override(600,600) //尺寸        .transform(new CircleCrop()) //圆角        .priority(Priority.HIGH) //优先级        .diskCacheStrategy(DiskCacheStrategy.NONE); //缓存策略,后面详细介绍Glide.with(this).load(IMG_URL1).apply(requestOptions).into(testIv1);Glide.with(this).load(IMG_URL2).apply(requestOptions).into(testIv2);

TransitionOptions

TransitionOptions是用来设置占位图片或者缩略图片切换到真正需要加载的图片之间的过度效果。

1. 常用效果

  • crossFade()
  • animate()

2. 移除效果

  • dontTransition()

3. 三个子类

  • GenericTransitionOptions
  • DrawableTransitionOptions
  • BitmapTransitionOptions

3. 通过RequestBuilder的transition加载

Glide.with(this).load(IMG_URL1).apply(requestOptions)    .transition(new DrawableTransitionOptions().crossFade(2000)) //淡入淡出2.into(testIv1);

RequestBuilder

1. 概述
requestbuilder是请求的主体,负责请求的各种操作,并开始请求。
使用requestbuilder可以指定:

  • 资源要加载的类型(Bitmap, Drawable等)
  • 加载资源的URL / Model
  • 载入资源
  • 设置requestoption对象
  • 设置transitionoption对象
  • 设置thumbnail()缩略图对象
  • 设置listener监听

2. 资源要加载的类型
requestbuilders针对资源类型进行加载。资源类型包括Bitmap,Drawable,GifDrawable等。默认情况下,你会得到一个Drawable RequestBuilder。您可以使用as…的方法更改请求的类型。例如

RequestBuilder<Bitmap> requestBuilder = Glide.with(fragment).asBitmap();

3. 其他常用方法
3.1 加载资源的URL / Model

load(url)

3.2 载入资源

into()

3.3 设置thumbnail()缩略图对象

thumbnail(Glide.with(this).load(thumb_url)

3.4 设置requestoption对象

apply(requestOptions);

3.5 设置transitionoption对象

transition(transitionOptions)

3.6 设置listener监听

listener(requestListener)

4. 示例代码

RequestOptions requestOptions = new RequestOptions()        .centerCrop() // 填充方式        .override(600,600) //尺寸        .transform(new CircleCrop()) //圆角        .priority(Priority.HIGH) //优先级        .diskCacheStrategy(DiskCacheStrategy.NONE); //缓存策略,后面详细介绍RequestBuilder<Drawable> requestBuilder = Glide.with(this)        .load(IMG_URL1);requestBuilder      //  .thumbnail(Glide.with(this).load(R.mipmap.error)) //缩略图        .apply(requestOptions) //requestOptions        .transition(new DrawableTransitionOptions().crossFade(2000)) //变换        .listener(new RequestListener<Drawable>() {            @Override            public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {                Log.e("Tag", "onLoadFailed : " + e.getMessage());                return false;            }            @Override            public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {                Log.e("Tag", "onResourceReady : " + resource);                return false;            }        })        .into(testIv1);

点滴分享  共同进步


阅读全文
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 媒体声音突然没有声音了该怎么办 华为微信运动步数为零怎么办 淘宝店铺没货了客户拍了怎么办 房子涨价了卖家反悔不卖了怎么办 买的东西很贵质量不好怎么办 在淘宝开的店账号忘了怎么办 建了个淘宝优惠券群没人购物怎么办 刚开的淘宝店没有生意怎么办 房产代理公司不给渠道结佣金怎么办 天猫超过72小时不发货怎么办 流量魔盒苹果下载怎么打不开怎么办 淘宝包邮店铺新疆地区拍怎么办 淘宝客服当顾客要优惠时怎么办 微信手机号注册的找不到了怎么办 之前注册的微信找不到了怎么办 苹果ipad的id密码忘了怎么办 淘宝和支付宝用一张银行卡怎么办 淘宝卖家填写虚假物流信息怎么办 淘宝店铺的浏览量越来越少怎么办 网上充手机话费充错了怎么办 夜神模拟器上陌陌的位置不对怎么办 如果在大庭广众之下放了个屁怎么办 淘宝分销上传宝贝被系统下架怎么办 酷狗喜欢歌单里面的歌都没了怎么办 苹果手机下载不了微信缓冲怎么办 登陆微信提示版本过低登不了怎么办 苹果手机微信版本过低登不上怎么办 微信小程序显示微信版本过低怎么办 三星手机登微信显示版本过低怎么办 微信版本低无法登录无法升级怎么办 手机淘宝五应用界面无法打开怎么办 入住淘宝主播没有微博粉丝怎么办 手机淘宝领金币怎么没有了怎么办 淘宝荬家缺货对付款买家怎么办 淘宝买家确认收货后申请退款怎么办 淘宝东西失效了但付过款了怎么办 淘宝图片被投诉盗图怎么办原图没了 淘宝退款申请不小心撤销了怎么办 淘宝不小心点了撤销退款怎么办 淘宝上退款不小心撤销了怎么办 新店淘宝卖家想开通直播怎么办