我正试图动态地从我的/ res文件夹中获取图像,我只是对下一部分感到困惑。我环顾了StackOverflow并看到了这个我需要开始的例子:
String fName = "android.resource://j.l.library11/drawable/" + itemName;
我认为,因为它在我的/ res文件夹中它将是:
String fName = "android.resource://j.l.library11/drawable/res/" + itemName;
这2个中哪一个是正确的?
另外,我只是对我接下来的几个步骤感到困惑,我可以使用my / res文件夹(itemName)中的图像设置我的ImageView(iView)。我能想到的唯一一件事就是:
File file = new File(fName);
然后获取哈希码
int itemHashCode = file.HashCode()
然后将其用作
iView.setImageResource(itemHashCode).
这会有效还是有人知道对此的正确解决方案?
答案 0 :(得分:2)
放置在res / drawable中的图像由AAPT自动编译为R.java类内的整数映射。您可以使用以下方法在ImageView上设置图像:
myImageView.setImageResource(R.drawable.nameOfYourImage);
编辑:我不清楚你为什么要做你正在做的事情,但是用图像的哈希码设置ImageView的资源会导致ResourceNotFoundException。 / p>
编辑:如果您尝试根据与数据库中某些数据的关联动态设置图像,那么请利用已保存的已编译drawable的事实数据库中新的整数列中的R.drawable.imagename的int。然后,您只需将图像设置为setImageResource(intFromDB)
即可。如果您没有在代码中设置数据库,因此无法访问已编译的R.drawable,则替代方法如下:
Resources res = getResources();
String mDrawableName = "image_name";
int resourceId = res.getIdentifier(mDrawableName , "drawable", getPackageName());
Drawable drawable = res.getDrawable(resourceId);
icon.setImageDrawable(drawable );
甚至更短,这可能有效:
int id = getResources().getIdentifier("mypackagename:drawable/imageName", null, null);
imageView.setImageResource(id);
答案 1 :(得分:0)
我会反思:
Field[] fields = R.drawable.class.getFields();
for(Field field:fields){
try {
imageView.setImageResource(field.getInt(null));
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}