package tv.avfun.util; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.URI; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bitmap.CompressFormat; import android.graphics.drawable.BitmapDrawable; import com.nostra13.universalimageloader.core.download.URLConnectionImageDownloader; /** * @author Sergey Tarasevich (nostra13[at]gmail[dot]com) */ public class ExtendedImageDownloader extends URLConnectionImageDownloader { public static final String PROTOCOL_ASSETS = "assets"; public static final String PROTOCOL_DRAWABLE = "drawable"; private static final String PROTOCOL_ASSETS_PREFIX = PROTOCOL_ASSETS + "://"; private static final String PROTOCOL_DRAWABLE_PREFIX = PROTOCOL_DRAWABLE + "://"; private Context context; public ExtendedImageDownloader(Context context) { this.context = context; } @Override protected InputStream getStreamFromOtherSource(URI imageUri) throws IOException { String protocol = imageUri.getScheme(); if (PROTOCOL_ASSETS.equals(protocol)) { return getStreamFromAssets(imageUri); } else if (PROTOCOL_DRAWABLE.equals(protocol)) { return getStreamFromDrawable(imageUri); } else { return super.getStreamFromOtherSource(imageUri); } } private InputStream getStreamFromAssets(URI imageUri) throws IOException { String filePath = imageUri.toString().substring(PROTOCOL_ASSETS_PREFIX.length()); // Remove "assets://" prefix from image URI return context.getAssets().open(filePath); } private InputStream getStreamFromDrawable(URI imageUri) { String drawableIdString = imageUri.toString().substring(PROTOCOL_DRAWABLE_PREFIX.length()); // Remove "drawable://" prefix from image URI int drawableId = Integer.parseInt(drawableIdString); BitmapDrawable drawable = (BitmapDrawable) context.getResources().getDrawable(drawableId); Bitmap bitmap = drawable.getBitmap(); ByteArrayOutputStream os = new ByteArrayOutputStream(); bitmap.compress(CompressFormat.PNG, 0, os); return new ByteArrayInputStream(os.toByteArray()); } }