鍍金池/ 教程/ Android/ Generated API
配置
Generated API
轉(zhuǎn)換
選項
過渡效果
關(guān)于Glide
緩存
調(diào)試
目標(biāo)
占位符
下載和設(shè)置
入門指南

Generated API

Glide v4通過注解處理器生成一個API,允許應(yīng)用程序以一個靈活的API訪問RequestBuilder、RequestOptions的所有選項以及包含的集成庫中定義的選項。

生成的API服務(wù)于兩個目的:

  1. 集成庫可以通過自定義選項擴(kuò)展Glide的API。
  2. 應(yīng)用程序可以通過添加綁定常用選項的方法來擴(kuò)展Glide的API。

雖然這兩個任務(wù)都可以通過手動編寫自定義RequestOptions的子類來實現(xiàn),但這樣做是有挑戰(zhàn)性的,并且會產(chǎn)生不太靈活的API。

入門

Java

要使用生成的API,您需要執(zhí)行兩個步驟:

  1. 在Glide的注解處理器上添加依賴關(guān)系:
    
    repositories {
    mavenCentral()
    }

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


有關(guān)詳細(xì)信息,請參閱[下載和設(shè)置頁面](Download-Setup.md)。

2. 在應(yīng)用程序中包含一個[AppGlideModule](http://bumptech.github.io/glide/javadocs/400/com/bumptech/glide/module/AppGlideModule.html)實現(xiàn):

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)實現(xiàn)必須始終使用[@GlideModule](http://bumptech.github.io/glide/javadocs/400/com/bumptech/glide/annotation/GlideModule.html)注解。如果沒有使用該注解,該模塊將不會被發(fā)現(xiàn),并且您會在**Glide**的日志標(biāo)記中看到一條無法找到模塊的警告。

### Kotlin

如果您使用Kotlin,您可以:
1. 實現(xiàn)如上所示的所有的Glide的注解類(包括:AppGlideModule,LibraryGlideModule和GlideExtension)。
2. 在Kotlin中實現(xiàn)注解類,需要在Glide中添加kapt依賴關(guān)系,而不是annotationProcessor依賴關(guān)系:

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

要使用kapt,請參閱[官方文檔](https://kotlinlang.org/docs/reference/kapt.html)。

## 使用生成的API
默認(rèn)情況下,生成的API會跟您的[AppGlideModule](http://bumptech.github.io/glide/javadocs/400/com/bumptech/glide/module/AppGlideModule.html)實現(xiàn)在同一包下,類名為GlideApp。使用該API,應(yīng)用程序可以在所有的負(fù)載中用**GlideApp.with()**代替**Glide.with()**。

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


不同于**Glide.with()**,生成的API可以直接調(diào)用**fitCenter()**和**placeholder()**方法,而不必作為單獨的[RequestOptions](http://bumptech.github.io/glide/javadocs/400/com/bumptech/glide/request/RequestOptions.html)對象傳入。

## GlideExtension

Glide的生成的API可以由應(yīng)用程序和庫擴(kuò)展。擴(kuò)展使用帶注解的靜態(tài)方法來添加新的選項,修改已有的選項或者添加其他類型。

[GlideExtension](http://bumptech.github.io/glide/javadocs/400/com/bumptech/glide/annotation/GlideExtension.html)注解標(biāo)記一個類擴(kuò)展了Glide的API。該注解必須出現(xiàn)在任何擴(kuò)展了Glide API的類上。如果該注解不存在,那么注解方法將會被忽略。

通過GlideExtension注解標(biāo)記的類被認(rèn)為是實用程序類。這些類應(yīng)該包含私有的空的構(gòu)造函數(shù),也應(yīng)該是final的并且只包含靜態(tài)方法。注解類可能包含靜態(tài)變量跟引用其他類或者對象。

應(yīng)用程序可以實現(xiàn)多個GlideExtension注解類。庫也可以實現(xiàn)任意數(shù)量的GlideExtension注解類。當(dāng)一個AppGlideModule被找到時,所有的有效的GlideExtensions將被合并并創(chuàng)建一個單一的API里。沖突會導(dǎo)致Glide注解處理器錯誤。

GlideExtension注解類可以定義兩種類型的擴(kuò)展方法:
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)注解靜態(tài)方法擴(kuò)展[RequestOptions](http://bumptech.github.io/glide/javadocs/400/com/bumptech/glide/request/RequestOptions.html)。**GlideOption**被用在:
1. 定義一個在程序中頻繁被用到選項組。
2. 添加新的選項,通常結(jié)合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); }

... }


您可以在方法包含許多希望添加的參數(shù),只需要保證第一個參數(shù)是[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); }


附加的參數(shù)將作為參數(shù)添加到生成方法中:

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


接著,您可以使用生成的GlideApp類調(diào)用您自定義類型:

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


使用**GlideOption**注解的方法要求是靜態(tài)的,返回類型為void。請注意:生成的方法將不適用于標(biāo)準(zhǔn)的**Glide**跟**RequestOptions**類。

### GlideType

[GlideType](http://bumptech.github.io/glide/javadocs/400/com/bumptech/glide/annotation/GlideType.html)注解擴(kuò)展[RequestManager](http://bumptech.github.io/glide/javadocs/400/com/bumptech/glide/RequestManager.html)的靜態(tài)方法。GlideType注解的方法允許您添加新類型的支持,包括指定默認(rèn)選項。

比如,添加對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); } }


這樣將會產(chǎn)生一個包含如下方法的[RequestManager](http://bumptech.github.io/glide/javadocs/400/com/bumptech/glide/RequestManager.html)實現(xiàn)。

public class GlideRequests extends RequesetManager {

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

... }


然后,您可以使用生成的GlideApp類來調(diào)用自定義的方法:

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


由**GlideType**注解的方法必須將[RequestBuilder<T>](http://bumptech.github.io/glide/javadocs/400/com/bumptech/glide/RequestBuilder.html)作為第一個參數(shù),<T>是符合GlideType注解提供的類型。注解方法必須定義在[GlideExtension](http://bumptech.github.io/glide/javadocs/400/com/bumptech/glide/annotation/GlideExtension.html)注解的類中并且要求是靜態(tài)的,返回類型為void。
上一篇:轉(zhuǎn)換下一篇:調(diào)試