美文网首页
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