我知道可以使用以下blockquote或类似的方式使用其他应用程序的位图:
String packageName =" com.some.package";
资源res = getPackageManager()。getResourcesForApplication(packageName);
int resId = res.getIdentifier(" some_bitmap_icon"," drawable",packageName);
((BitmapDrawable)res.getDrawable(resId))。getBitmap();
是否有将res
和resId
传递给Android-Universal-Image-Loader以直接从第三方应用加载位图?
或者我是否必须将位图复制到SD卡,然后通过传递"file:///mnt/sdcard/some_temp_bitmap"
答案 0 :(得分:0)
感谢@CommonsWare指出我正确的方向。
我开始扩展BaseImageDownloader
,并覆盖getStreamFromOtherSource
:
public class CustomImageDownloader extends BaseImageDownloader {
public CustomImageDownloader(Context context) {
super(context);
}
@Override
protected InputStream getStreamFromOtherSource(String imageUri, Object extra) {
if (imageUri.startsWith("thirdparty://")) {
try {
String drawableString = imageUri.replace("thirdparty://", "");
String[] location = drawableString.split("/");
Resources res = context.getPackageManager().getResourcesForApplication(location[0]);
return res.openRawResource(Integer.parseInt(location[1]));
} catch (PackageManager.NameNotFoundException e) {
return null;
}
} else throw new UnsupportedOperationException(imageUri);
}
}
然后使用:
在我的ImageLoaderConfiguration中实现了这个类ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
.imageDownloader(new CustomImageDownloader(context))
.build();
ImageLoader.getInstance().init(config);
然后,这只是使用以下方式启动图像加载器的情况:
ImageLoader.getInstance().displayImage("thirdparty://"+ packageName + "/" + resId, imageView, options);
现在Android universal image loader可用于从第三方应用加载位图。