content: package com.lidroid.xutils.bitmap.core;
  
  import android.graphics.*;
  import android.graphics.drawable.Drawable;
  import android.view.View;
  import com.lidroid.xutils.BitmapUtils;
  
  import java.lang.ref.WeakReference;
  
  /**
   * Author: wyouflf
   * Date: 13-11-17
   * Time: 上午11:42
   */
  public class AsyncDrawable<T extends View> extends Drawable {
  
      private final WeakReference<BitmapUtils.BitmapLoadTask<T>> bitmapLoadTaskReference;
  
      private final Drawable baseDrawable;
  
      public AsyncDrawable(Drawable drawable, BitmapUtils.BitmapLoadTask<T> bitmapWorkerTask) {
          if (bitmapWorkerTask == null) {
              throw new IllegalArgumentException("bitmapWorkerTask may not be null");
          }
          baseDrawable = drawable;
          bitmapLoadTaskReference = new WeakReference<BitmapUtils.BitmapLoadTask<T>>(bitmapWorkerTask);
      }
  
      public BitmapUtils.BitmapLoadTask<T> getBitmapWorkerTask() {
          return bitmapLoadTaskReference.get();
      }
  
      @Override
      public void draw(Canvas canvas) {
          if (baseDrawable != null) {
              baseDrawable.draw(canvas);
          }
      }
  
      @Override
      public void setAlpha(int i) {
          if (baseDrawable != null) {
              baseDrawable.setAlpha(i);
          }
      }
  
      @Override
      public void setColorFilter(ColorFilter colorFilter) {
          if (baseDrawable != null) {
              baseDrawable.setColorFilter(colorFilter);
          }
      }
  
      @Override
      public int getOpacity() {
          return baseDrawable == null ? Byte.MAX_VALUE : baseDrawable.getOpacity();
      }
  
      @Override
      public void setBounds(int left, int top, int right, int bottom) {
          if (baseDrawable != null) {
              baseDrawable.setBounds(left, top, right, bottom);
          }
      }
  
      @Override
      public void setBounds(Rect bounds) {
          if (baseDrawable != null) {
              baseDrawable.setBounds(bounds);
          }
      }
  
      @Override
      public void setChangingConfigurations(int configs) {
          if (baseDrawable != null) {
              baseDrawable.setChangingConfigurations(configs);
          }
      }
  
      @Override
      public int getChangingConfigurations() {
          return baseDrawable == null ? 0 : baseDrawable.getChangingConfigurations();
      }
  
      @Override
      public void setDither(boolean dither) {
          if (baseDrawable != null) {
              baseDrawable.setDither(dither);
          }
      }
  
      @Override
      public void setFilterBitmap(boolean filter) {
          if (baseDrawable != null) {
              baseDrawable.setFilterBitmap(filter);
          }
      }
  
      @Override
      public void invalidateSelf() {
          if (baseDrawable != null) {
              baseDrawable.invalidateSelf();
          }
      }
  
      @Override
      public void scheduleSelf(Runnable what, long when) {
          if (baseDrawable != null) {
              baseDrawable.scheduleSelf(what, when);
          }
      }
  
      @Override
      public void unscheduleSelf(Runnable what) {
          if (baseDrawable != null) {
              baseDrawable.unscheduleSelf(what);
          }
      }
  
      @Override
      public void setColorFilter(int color, PorterDuff.Mode mode) {
          if (baseDrawable != null) {
              baseDrawable.setColorFilter(color, mode);
          }
      }
  
      @Override
      public void clearColorFilter() {
          if (baseDrawable != null) {
              baseDrawable.clearColorFilter();
          }
      }
  
      @Override
      public boolean isStateful() {
          return baseDrawable != null && baseDrawable.isStateful();
      }
  
      @Override
      public boolean setState(int[] stateSet) {
          return baseDrawable != null && baseDrawable.setState(stateSet);
      }
  
      @Override
      public int[] getState() {
          return baseDrawable == null ? null : baseDrawable.getState();
      }
  
      @Override
      public Drawable getCurrent() {
          return baseDrawable == null ? null : baseDrawable.getCurrent();
      }
  
      @Override
      public boolean setVisible(boolean visible, boolean restart) {
          return baseDrawable != null && baseDrawable.setVisible(visible, restart);
      }
  
      @Override
      public Region getTransparentRegion() {
          return baseDrawable == null ? null : baseDrawable.getTransparentRegion();
      }
  
      @Override
      public int getIntrinsicWidth() {
          return baseDrawable == null ? 0 : baseDrawable.getIntrinsicWidth();
      }
  
      @Override
      public int getIntrinsicHeight() {
          return baseDrawable == null ? 0 : baseDrawable.getIntrinsicHeight();
      }
  
      @Override
      public int getMinimumWidth() {
          return baseDrawable == null ? 0 : baseDrawable.getMinimumWidth();
      }
  
      @Override
      public int getMinimumHeight() {
          return baseDrawable == null ? 0 : baseDrawable.getMinimumHeight();
      }
  
      @Override
      public boolean getPadding(Rect padding) {
          return baseDrawable != null && baseDrawable.getPadding(padding);
      }
  
      @Override
      public Drawable mutate() {
          return baseDrawable == null ? null : baseDrawable.mutate();
      }
  
      @Override
      public ConstantState getConstantState() {
          return baseDrawable == null ? null : baseDrawable.getConstantState();
      }
  }
  