一骑脱、類結(jié)構(gòu)
基類 Target<Z>
子類 BaseTarget<Z>
BaseTarget 的子類
PreloadTarget,
SimpleTarget<T>粹胯,
ViewTarget<T extends View>
二烁巫、ImageViewTarget
index | class | ImageViewTarget | 說明 |
---|---|---|---|
1 | Bitmap | BitmapImageViewTarget | |
2 | Drawable | DrawableImageViewTarget | |
3 | GifDrawable | DrawableImageViewTarget | isAssignableFrom方法 |
從Resource<R>獲取具體數(shù)據(jù)赖舟,Target 的 onResourceReady() 方法巢寡。
@Override
public void onResourceReady(@NonNull Z resource, @Nullable Transition<? super Z> transition) {
if (transition == null || !transition.transition(resource, this)) {
setResourceInternal(resource);
} else {
maybeUpdateAnimatable(resource);
}
}
不需要Transition 漸變喉脖,直接顯示,內(nèi)部 setResourceInternal() 方法抑月。
抽象方法
protected abstract void setResource(@Nullable Z resource);
子類 BitmapImageViewTarget 或 DrawableImageViewTarget 重寫树叽。
資源是 Bitmap 和 Drawable。
分別調(diào)用 ImageView 的 setImageBitmap() 和 setImageDrawable() 方法谦絮。
maybeUpdateAnimatable() 方法菱皆,動畫 ,Resource<T> 包裝資源類型是 Animatable挨稿,如 GifDrawable。
如果需要漸變京痢,不需要 setResource奶甘,直接 maybeUpdateAnimatable()。
漸變 transition() 方法已經(jīng)做過 setDrawable()祭椰。
三臭家、Transition 過渡
RequestBuilder 中的 transition() 方法疲陕。
public RequestBuilder<TranscodeType> transition(
TransitionOptions<?, ? super TranscodeType> transitionOptions) {
this.transitionOptions = Preconditions.checkNotNull(transitionOptions);
isDefaultTransitionOptionsSet = false;
return this;
}
TransitionFactory 工廠,來自 TransitionOptions 钉赁。
TransitionOptions 類型 包括
BitmapTransitionOptions
DrawableTransitionOptions
public static DrawableTransitionOptions withCrossFade() {
return new DrawableTransitionOptions().crossFade();
}
public DrawableTransitionOptions crossFade() {
return crossFade(new DrawableCrossFadeFactory.Builder());
}
withCrossFade() 方法蹄殃, 可傳 duration。
DrawableCrossFadeFactory 工廠你踩。
創(chuàng)建 Transition<Drawable> 诅岩,即 DrawableCrossFadeTransition。
漸變方法带膜。
public boolean transition(Drawable current, ViewAdapter adapter) {
Drawable previous = adapter.getCurrentDrawable();
if (previous == null) {
previous = new ColorDrawable(Color.TRANSPARENT);
}
TransitionDrawable transitionDrawable =
new TransitionDrawable(new Drawable[] { previous, current });
transitionDrawable.setCrossFadeEnabled(isCrossFadeEnabled);
transitionDrawable.startTransition(duration);
adapter.setDrawable(transitionDrawable);
return true;
}
通過系統(tǒng) TransitionDrawable 類吩谦,實現(xiàn)漸變。
ViewAdapter 接口膝藕,即 ImageViewTarget 的實現(xiàn)接口式廷。
任重而道遠