继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Glide v4 变换

吃鸡游戏
关注TA
已关注
手记 471
粉丝 55
获赞 339

关于变换

在Glide中,Transformations 可以获取资源并修改它,然后返回被修改后的资源。通常变换操作是用来完成剪裁或对位图应用过滤器,但它也可以用于转换GIF动画,甚至自定义的资源类型。

内置类型

Glide 提供了很多内置的变换,包括:

应用

通过 RequestOptions 类可以应用变换:

默认变换

RequestOptions options = new RequestOptions();options.centerCrop();Glide.with(fragment)
    .load(url)
    .apply(options)
    .into(imageView);

大多数内置的变换都有静态的 import ,这是为 API 的流畅性考虑的。例如,你可以通过静态方法应用一个 FitCenter 变换:

import static com.bumptech.glide.request.RequestOptions.fitCenterTransform;Glide.with(fragment)
    .load(url)
    .apply(fitCenterTransform())
    .into(imageView);

如果你正在使用 Generated API ,那么这些变换方法已经被内联了,所以使用起来甚至更为轻松:

GlideApp.with(fragment)
  .load(url)
  .fitCenter()
  .into(imageView);

可以查阅 Options 页来获得更多 RequestOption 的相关信息。

多重变换

默认情况下,每个 transform() 调用,或任何特定转换方法(fitCenter()centerCrop()bitmapTransform() etc)的调用都会替换掉之前的变换。

如果你想在单次加载中应用多个变换,请使用 MultiTransformation 类。

使用 generated API:

Glide.with(fragment)
  .load(url)
  .transform(new MultiTransformation(new FitCenter(), new YourCustomTransformation())
  .into(imageView);

或结合使用快捷方法和 generated API

GlideApp.with(fragment)
  .load(url)
  .transforms(new FitCenter(), new YourCustomTransformation())
  .into(imageView);

请注意,你向 MultiTransformation 的构造器传入变换参数的顺序,决定了这些变换的应用顺序。

Glide中的特殊行为

重用变换

Transformation 的设计初衷是无状态的。因此,在多个加载中复用 Transformation 应当总是安全的。创建一次 Transformation 并在多个加载中使用它,通常是很好的实践。

ImageView的自动变换

在Glide中,当你为一个 ImageView 开始加载时,Glide可能会自动应用 FitCenter 或 CenterCrop ,这取决于view的 ScaleType 。如果 scaleType 是 CENTER_CROP , Glide 将会自动应用 CenterCrop 变换。如果 scaleType 为 FIT_CENTER 或 CENTER_INSIDE ,Glide会自动使用 FitCenter 变换。

当然,你总有权利覆写默认的变换,只需要一个带有 Transformation 集合的 RequestOptions 即可。另外,你也可以通过使用 dontTransform() 确保不会自动应用任何变换。

自定义资源

因为 Glide 4.0 允许你指定你将解码的资源的父类型,你可能无法确切地知道将会应用何种变换。例如,当你使用 asDrawable() (或就是普通的 with() ,因为 asDrawable() 是默认情形)来加载 Drawable 资源时,你可能会得到 BitmapDrawable 子类,也有可能得到 GifDrawable 子类。

为了确保你添加到 RequestOptions 中的任何变换都会被使用,Glide将 Transformation 添加到一个Map中保存,其Key为你提供变换的资源类型。当资源被成功解码时,Glide使用这个Map来取回对应的 Transformation 。

Glide可以将 Bitmap Transformation应用到 BitmapDrawable , GifDrawable , 以及 Bitmap 资源上,因此通常你只需要编写和应用 BitmapTransformation 。然而,如果你添加了额外的资源类型,你可能需要考虑派生 RequestOptions 类,并让你的资源类型能应用Glide内置的 BitmapTransformation

原文链接:http://www.apkbus.com/blog-873055-75805.html

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP