如何动态获取我/ res文件夹中的图像

时间:2012-09-21 07:37:47

标签: android image view

我正试图动态地从我的/ 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).  

这会有效还是有人知道对此的正确解决方案?

2 个答案:

答案 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();
        }
}