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(); } }