Glide.with(this).load(url).into(imageView);
Glide調用with()方法初始化成功后,會返回RequestManager的實例。
1、RequestManager類中有多個load()的重載方法
public RequestBuilder<Drawable> load(@Nullable Bitmap bitmap) {
return asDrawable().load(bitmap);
}
public RequestBuilder<Drawable> load(@Nullable Drawable drawable) {
return asDrawable().load(drawable);
}
public RequestBuilder<Drawable> load(@Nullable String string) {
return asDrawable().load(string);
}
public RequestBuilder<Drawable> load(@Nullable Uri uri) {
return asDrawable().load(uri);
}
public RequestBuilder<Drawable> load(@Nullable File file) {
return asDrawable().load(file);
}
public RequestBuilder<Drawable> load(@RawRes @DrawableRes @Nullable Integer resourceId) {
return asDrawable().load(resourceId);
}
public RequestBuilder<Drawable> load(@Nullable URL url) {
return asDrawable().load(url);
}
public RequestBuilder<Drawable> load(@Nullable byte[] model) {
return asDrawable().load(model);
}
public RequestBuilder<Drawable> load(@Nullable Object model) {
return asDrawable().load(model);
}
2、asDrawable()
@NonNull
@CheckResult
public RequestBuilder<Drawable> asDrawable() {
return as(Drawable.class);
}
-->新建一個RequestBuilder
@NonNull
@CheckResult
public <ResourceType> RequestBuilder<ResourceType> as(
@NonNull Class<ResourceType> resourceClass) {
return new RequestBuilder<>(glide, this, resourceClass, context);
}
-->RequestBuilder的創建
public class RequestBuilder<TranscodeType> extends BaseRequestOptions<RequestBuilder<TranscodeType>>
implements Cloneable,
ModelTypes<RequestBuilder<TranscodeType>> {
@Nullable private Object model;
private final Context context;
private final Glide glide;
private final RequestManager requestManager;
private final Class<TranscodeType> transcodeClass;
private TransitionOptions<?, ? super TranscodeType> transitionOptions;//過渡動畫配置
private final GlideContext glideContext;
protected RequestBuilder(
@NonNull Glide glide,
RequestManager requestManager,
Class<TranscodeType> transcodeClass,
Context context) {
this.glide = glide;
this.requestManager = requestManager;
this.transcodeClass = transcodeClass; //Drawable.class
this.context = context;
this.transitionOptions = requestManager.getDefaultTransitionOptions(transcodeClass);設置默認的過渡動畫
this.glideContext = glide.getGlideContext();
//設置RequestListener集合
//用來給調用者監聽圖片的加載成功和失敗
initRequestListeners(requestManager.getDefaultRequestListeners());
//設置默認的請求配置,DefaultRequestOptions()只是一個new RequestOptions()
apply(requestManager.getDefaultRequestOptions());
}
}
RequestBuilder 用來構建請求,例如設置 RequestOption、縮略圖、過渡動畫、加載失敗占位圖等等。
3、asDrawable().load(xxx)
public class RequestBuilder {
@NonNull
private RequestBuilder<TranscodeType> loadGeneric(@Nullable Object model) {
this.model = model;
isModelSet = true;
return this;
}
}
RequestManager的多個load重載方法,最后都一定會調用到RequestBuilder的loadGeneric,loadGeneric方法是用來設置圖片資源的來源類型為String;這里有個Model的概念,指的是圖片數據來源,可以是本地的圖片鏈接,可以是url,可以drawable的資源id。
總結:load(xxx)方法實際上就是用來構建RequestBuilder實例,并且設置圖片資源的來源類型。