美文网首页
Glide Target

Glide Target

作者: gczxbb | 来源:发表于2021-01-21 23:38 被阅读0次

一、类结构

基类 Target<Z>
子类 BaseTarget<Z>

BaseTarget 的子类
PreloadTarget,
SimpleTarget<T>,
ViewTarget<T extends View>

Target 类图

二、ImageViewTarget

index class ImageViewTarget 说明
1 Bitmap BitmapImageViewTarget
2 Drawable DrawableImageViewTarget
3 GifDrawable DrawableImageViewTarget isAssignableFrom方法

从Resource<R>获取具体数据,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 渐变,直接显示,内部 setResourceInternal() 方法。

抽象方法

protected abstract void setResource(@Nullable Z resource);

子类 BitmapImageViewTarget 或 DrawableImageViewTarget 重写。
资源是 Bitmap 和 Drawable。
分别调用 ImageView 的 setImageBitmap() 和 setImageDrawable() 方法。

maybeUpdateAnimatable() 方法,动画 ,Resource<T> 包装资源类型是 Animatable,如 GifDrawable。

如果需要渐变,不需要 setResource,直接 maybeUpdateAnimatable()。
渐变 transition() 方法已经做过 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 工厂。
创建 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;
}

通过系统 TransitionDrawable 类,实现渐变。
ViewAdapter 接口,即 ImageViewTarget 的实现接口。


任重而道远

相关文章

网友评论

      本文标题:Glide Target

      本文链接:https://www.haomeiwen.com/subject/gbppaktx.html