我有以下问题:
假设到目前为止,我正在使用R.drawable.img在某些图像视图中设置图像 与
imgView.setImage(aProduct.getImgId());
简化的产品类看起来像这样:
class Product{
int imgId;
....
public void setImgId(int id){
this.imgId=id;
}
public int getImgId(){
return this.imgId
}
...
}
我的应用程序现已“进化”,因为用户可以添加自定义产品 从相机中取出img并获得图片的Uri。 并在ImageView imgView.setImgURI(Uri)上设置图像
现在我的问题是: 什么是混合int / Uri图像资源环境的最佳方法? 我可以获得“R.drawable.img”的Uri吗?
我不确定我的问题是否清楚,我的意思是:
在设置imageview之前,我必须检查我的产品是否有Uri或int Id, 然后创建一个“if”来调用适当的方法,或者有一个更简单的解决方案?
感谢您的阅读,对不起我的英语。
问候。
答案 0 :(得分:1)
您的问题是基本上有3种类型的图像资源:
R.id...
资源:内部资源,例如您放入res文件夹的图标content://
或file:///sdcard/...
http://...
您正在寻找一种方法来传递一个标识符,它可以处理所有三个。我的解决方案是传递字符串:URI的toString(),或只是R.id整数的字符串表示。
我正在使用以下代码来处理这个问题,并使代码能够使用它:
public static FastBitmapDrawable returnAndCacheCover(String cover, ImageRepresentedProductArtworkCreator artworkCreator) {
Bitmap bitmap = null;
Uri coverUri = null;
boolean mightBeUri = false;
//Might be a resId. Needs to be cached. //TODO: problem: resId of default cover may not survive across versions of the app.
try {
bitmap = BitmapFactory.decodeResource(Collectionista.getInstance().getResources(), Integer.parseInt(cover));
} catch (NumberFormatException e) {
//Not a resId after all.
mightBeUri=true;
}
if(bitmap==null || mightBeUri){
//Is not a resId. Might be a contentUri.
try {
coverUri = Uri.parse(cover);
} catch (NullPointerException ne) {
//Is null
return null;
}
}
if(coverUri!=null){
if(coverUri.getScheme().equals("content")){
//A contentUri. Needs to be cached.
try {
bitmap = MediaStore.Images.Media.getBitmap(Collectionista.getInstance().getContentResolver(), coverUri);
} catch (FileNotFoundException e) {
return null;
} catch (IOException e) {
return null;
}
}else{
//Might be a web uri. Needs to be cached.
bitmap = loadCoverFromWeb(cover);
}
}
return new FastBitmapDrawable(bitmap);
}
您可能有兴趣接管逻辑部分。 Ofcourse cover
是这里的问题字符串。
忘记android.resource://
作为R.id...
整数的替代。索赔正在循环不起作用:http://groups.google.com/group/android-developers/browse_thread/thread/a672d71dd7df4b2d
要了解如何实施loadCoverFromWeb
,请浏览其他问题或ping我。这个网站的东西是它自己的一个领域。
(基于我的应用Collectionista中的GPLv3代码:https://code.launchpad.net/~pjv/collectionista/trunk)