码迷,mamicode.com
首页 > 其他好文 > 详细

picasso 之Action及其子类ImageViewAction

时间:2015-05-11 20:16:35      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:

Action代表的是一个具体的加载类。

里有一个静态内部类

static class RequestWeakReference<M> extends WeakReference<M> {
    final Action action;
    public RequestWeakReference(Action action, M referent, ReferenceQueue<? super M> q) {
      super(referent, q);
      this.action = action;
    }
  }

这里的referent,在ImageViewAction中传进来就是ImageView

Action主要定义了两个方法

  abstract void complete(Bitmap result, Picasso.LoadedFrom from);
  abstract void error();

   构造方法:

Action(Picasso picasso, T target, Request request, int memoryPolicy, int networkPolicy,

      int errorResId, Drawable errorDrawable, String key, Object tag, boolean noFade) {

    this.picasso = picasso;

    this.request = request;

    this.target =

        target == null ? null : new RequestWeakReference<T>(this, target, picasso.referenceQueue);

    this.memoryPolicy = memoryPolicy;

    this.networkPolicy = networkPolicy;

    this.noFade = noFade;

    this.errorResId = errorResId;

    this.errorDrawable = errorDrawable;

    this.key = key;

    this.tag = (tag != null ? tag : this);

  }

   现在看子类ImageViewAction:    

    构造方法

ImageViewAction(Picasso picasso, ImageView imageView, Request data, int memoryPolicy,

      int networkPolicy, int errorResId, Drawable errorDrawable, String key, Object tag,

      Callback callback, boolean noFade) {

    super(picasso, imageView, data, memoryPolicy, networkPolicy, errorResId, errorDrawable, key,

        tag, noFade);

    this.callback = callback;

  }

    

@Override public void complete(Bitmap result, Picasso.LoadedFrom from) {
    if (result == null) {
      throw new AssertionError(
          String.format("Attempted to complete action with no result!\n%s", this));
    }
    ImageView target = this.target.get();    //这是一个虚引用
    if (target == null) {            //如果imageview已经被回收了,直接返回
      return;
    }
    Context context = picasso.context;
    boolean indicatorsEnabled = picasso.indicatorsEnabled;
    PicassoDrawable.setBitmap(target, context, result, from, noFade, indicatorsEnabled);
    if (callback != null) {
      callback.onSuccess();
    }
  }

    

picasso 之Action及其子类ImageViewAction

标签:

原文地址:http://my.oschina.net/u/1777377/blog/413380

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!