返回介绍

Generated API

发布于 2025-01-04 00:12:05 字数 6515 浏览 0 评论 0 收藏 0

Glide v4 通过注解处理器生成一个 API,允许应用程序以一个灵活的 API 访问 RequestBuilderRequestOptions 的所有选项以及包含的集成库中定义的选项。

生成的 API 服务于两个目的:

  1. 集成库可以通过自定义选项扩展 Glide 的 API。
  2. 应用程序可以通过添加绑定常用选项的方法来扩展 Glide 的 API。

虽然这两个任务都可以通过手动编写自定义 RequestOptions 的子类来实现,但这样做是有挑战性的,并且会产生不太灵活的 API。

入门

Java

要使用生成的 API,您需要执行两个步骤:

  1. 在 Glide 的注解处理器上添加依赖关系:
    
    repositories {
    mavenCentral()
    }

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


有关详细信息,请参阅[下载和设置页面](Download-Setup.md)。

2. 在应用程序中包含一个[AppGlideModule](http://bumptech.github.io/glide/javadocs/400/com/bumptech/glide/module/AppGlideModule.html) 实现:

package com.example.myapp;

import com.bumptech.glide.annotation.GlideModule; import com.bumptech.glide.module.AppGlideModule;

@GlideModule public final class MyAppGlideModule extends AppGlideModule {}


[AppGlideModule](http://bumptech.github.io/glide/javadocs/400/com/bumptech/glide/module/AppGlideModule.html) 实现必须始终使用[@GlideModule](http://bumptech.github.io/glide/javadocs/400/com/bumptech/glide/annotation/GlideModule.html) 注解。如果没有使用该注解,该模块将不会被发现,并且您会在**Glide**的日志标记中看到一条无法找到模块的警告。

### Kotlin

如果您使用 Kotlin,您可以:
1. 实现如上所示的所有的 Glide 的注解类(包括:AppGlideModule,LibraryGlideModule 和 GlideExtension)。
2. 在 Kotlin 中实现注解类,需要在 Glide 中添加 kapt 依赖关系,而不是 annotationProcessor 依赖关系:

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

要使用 kapt,请参阅[官方文档](https://kotlinlang.org/docs/reference/kapt.html)。

## 使用生成的 API
默认情况下,生成的 API 会跟您的[AppGlideModule](http://bumptech.github.io/glide/javadocs/400/com/bumptech/glide/module/AppGlideModule.html) 实现在同一包下,类名为 GlideApp。使用该 API,应用程序可以在所有的负载中用**GlideApp.with()**代替**Glide.with()**。

GlideApp.with(fragment) .load(myUrl) .placeholder(R.drawable.placeholder) .fitCenter() .into(imageView);


不同于**Glide.with()**,生成的 API 可以直接调用**fitCenter()**和**placeholder()**方法,而不必作为单独的[RequestOptions](http://bumptech.github.io/glide/javadocs/400/com/bumptech/glide/request/RequestOptions.html) 对象传入。

## GlideExtension

Glide 的生成的 API 可以由应用程序和库扩展。扩展使用带注解的静态方法来添加新的选项,修改已有的选项或者添加其他类型。

[GlideExtension](http://bumptech.github.io/glide/javadocs/400/com/bumptech/glide/annotation/GlideExtension.html) 注解标记一个类扩展了 Glide 的 API。该注解必须出现在任何扩展了 Glide API 的类上。如果该注解不存在,那么注解方法将会被忽略。

通过 GlideExtension 注解标记的类被认为是实用程序类。这些类应该包含私有的空的构造函数,也应该是 final 的并且只包含静态方法。注解类可能包含静态变量跟引用其他类或者对象。

应用程序可以实现多个 GlideExtension 注解类。库也可以实现任意数量的 GlideExtension 注解类。当一个 AppGlideModule 被找到时,所有的有效的 GlideExtensions 将被合并并创建一个单一的 API 里。冲突会导致 Glide 注解处理器错误。

GlideExtension 注解类可以定义两种类型的扩展方法:
1. [GlideOption](http://bumptech.github.io/glide/javadocs/400/com/bumptech/glide/annotation/GlideOption.html):给 RequestOptions 添加自定义的选项。
2. [GlideType](http://bumptech.github.io/glide/javadocs/400/com/bumptech/glide/annotation/GlideType.html):添加新的资源类型的支持(GIFs,SVG etc)。

### GlideOption

[GlideOption](http://bumptech.github.io/glide/javadocs/400/com/bumptech/glide/annotation/GlideOption.html) 注解静态方法扩展[RequestOptions](http://bumptech.github.io/glide/javadocs/400/com/bumptech/glide/request/RequestOptions.html)。**GlideOption**被用在:
1. 定义一个在程序中频繁被用到选项组。
2. 添加新的选项,通常结合 Glide 的[Option](http://bumptech.github.io/glide/javadocs/400/com/bumptech/glide/load/Option.html) 类使用。

定义选项组,您可以这样写:

@GlideExtension public class MyAppExtension { // Size of mini thumb in pixels. private static final int MINI_THUMB_SIZE = 100;

private MyAppExtension() { } // utility class

@GlideOption public static void miniThumb(RequestOptions options) { options .fitCenter() .override(MINI_THUMB_SIZE); }


在[RequestOptions](http://bumptech.github.io/glide/javadocs/400/com/bumptech/glide/request/RequestOptions.html) 的子类中生成一个如下的方法:

public class GlideOptions extends RequestOptions {

public GlideOptions miniThumb() { MyAppExtension.miniThumb(this); }

... }


您可以在方法包含许多希望添加的参数,只需要保证第一个参数是[RequestOptions](http://bumptech.github.io/glide/javadocs/400/com/bumptech/glide/request/RequestOptions.html):

@GlideOption public static void miniThumb(RequestOptions options, int size) { options .fitCenter() .override(size); }


附加的参数将作为参数添加到生成方法中:

public GlideOptions miniThumb(int size) { MyAppExtension.miniThumb(this); }


接着,您可以使用生成的 GlideApp 类调用您自定义类型:

GlideApp.with(fragment) .load(url) .miniThumb(thumbnailSize) .into(imageView);


使用**GlideOption**注解的方法要求是静态的,返回类型为 void。请注意:生成的方法将不适用于标准的**Glide**跟**RequestOptions**类。

### GlideType

[GlideType](http://bumptech.github.io/glide/javadocs/400/com/bumptech/glide/annotation/GlideType.html) 注解扩展[RequestManager](http://bumptech.github.io/glide/javadocs/400/com/bumptech/glide/RequestManager.html) 的静态方法。GlideType 注解的方法允许您添加新类型的支持,包括指定默认选项。

比如,添加对 GIF 的支持,您可以增加 GlideType 方法:

@GlideExtension public class MyAppExtension { private static final RequestOptions DECODE_TYPE_GIF = decodeTypeOf(GifDrawable.class).lock();

@GlideType(GifDrawable.class) public static void asGif(RequestBuilder requestBuilder) { requestBuilder .transition(new DrawableTransitionOptions()) .apply(DECODE_TYPE_GIF); } }


这样将会产生一个包含如下方法的[RequestManager](http://bumptech.github.io/glide/javadocs/400/com/bumptech/glide/RequestManager.html) 实现。

public class GlideRequests extends RequesetManager {

public RequestBuilder asGif() { RequestBuilder builder = as(GifDrawable.class); MyAppExtension.asGif(builder); return builder; }

... }


然后,您可以使用生成的 GlideApp 类来调用自定义的方法:

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


由**GlideType**注解的方法必须将[RequestBuilder<T>](http://bumptech.github.io/glide/javadocs/400/com/bumptech/glide/RequestBuilder.html) 作为第一个参数,<T>是符合 GlideType 注解提供的类型。注解方法必须定义在[GlideExtension](http://bumptech.github.io/glide/javadocs/400/com/bumptech/glide/annotation/GlideExtension.html) 注解的类中并且要求是静态的,返回类型为 void。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文