package external.smartimageview; import java.util.Map; import android.content.Context; import android.graphics.Bitmap; import android.util.AttributeSet; import com.aiyou.utils.thread.ThreadUtils; import com.aiyou.view.DarkImageView; import external.smartimageview.SmartImageTask.OnCompleteHandler; import external.smartimageview.SmartImageTask.OnCompleteListener; public class SmartImageView extends DarkImageView { private static WebImageCache webImageCache; private SmartImageTask mCurTask; public SmartImageView(Context context) { super(context); } public SmartImageView(Context context, AttributeSet attrs) { super(context, attrs); } public SmartImageView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } // Helpers to set image by URL public void setImageUrl(String url) { setImage(new WebImage(url)); } public void setImageUrl(String url, Map<String, String> header) { setImage(new WebImage(url), null, null, null, header); } public void setImageUrl(String url, OnCompleteListener completeListener) { setImage(new WebImage(url), completeListener); } public void setImageUrl(String url, final Integer fallbackResource) { setImage(new WebImage(url), fallbackResource); } public void setImageUrl(String url, final Integer fallbackResource, OnCompleteListener completeListener) { setImage(new WebImage(url), fallbackResource, completeListener); } public void setImageUrl(String url, final Integer fallbackResource, final Integer loadingResource) { setImage(new WebImage(url), fallbackResource, loadingResource); } public void setImageUrl(String url, final Integer fallbackResource, final Integer loadingResource, OnCompleteListener completeListener) { setImage(new WebImage(url), fallbackResource, loadingResource, completeListener); } // Set image using SmartImage object public void setImage(final SmartImage image) { setImage(image, null, null, null); } public void setImage(final SmartImage image, final OnCompleteListener completeListener) { setImage(image, null, null, completeListener); } public void setImage(final SmartImage image, final Integer fallbackResource) { setImage(image, fallbackResource, fallbackResource, null); } public void setImage(final SmartImage image, final Integer fallbackResource, OnCompleteListener completeListener) { setImage(image, fallbackResource, fallbackResource, completeListener); } public void setImage(final SmartImage image, final Integer fallbackResource, final Integer loadingResource) { setImage(image, fallbackResource, loadingResource, null); } public void setImage(final SmartImage image, final Integer fallbackResource, final Integer loadingResource, final OnCompleteListener completeListener) { setImage(image, fallbackResource, loadingResource, completeListener, null); } public void setImage(final SmartImage image, final Integer fallbackResource, final Integer loadingResource, final OnCompleteListener completeListener, final Map<String, String> header) { // Set a loading resource if (loadingResource != null) { setImageResource(loadingResource); } if (header == null) { Bitmap bmp = getBmpFromLocale(image.getUrl()); if (bmp != null) { setImageBitmap(bmp); return; } } // Cancel any existing tasks for this image view if (mCurTask != null) { mCurTask.cancel(); mCurTask = null; } // Set up the new task mCurTask = new SmartImageTask(getContext(), image, header); mCurTask.setOnCompleteHandler(new OnCompleteHandler() { @Override public void onComplete(Bitmap bitmap) { if (bitmap != null) { setImageBitmap(bitmap); } else { // Set fallback resource if (fallbackResource != null) { setImageResource(fallbackResource); } } if (completeListener != null) { completeListener.onComplete(); } } }); // Run the task in a threadpool ThreadUtils.execute(mCurTask); } private synchronized Bitmap getBmpFromLocale(String url) { if (webImageCache == null) { webImageCache = new WebImageCache(getContext()); } Bitmap bmp = webImageCache.get(url); return bmp; } }