0

我正在尝试动态地从我的 /res 文件夹中获取图像,但我对下一部分感到困惑。我环顾 StackOverflow,看到了这个例子,这是我需要开始的:

String fName = "android.resource://j.l.library11/drawable/" + itemName;

我想虽然它在我的 /res 文件夹中,但它会是:

String fName = "android.resource://j.l.library11/drawable/res/" + itemName;

这2个中哪一个是正确的?

此外,我只是对接下来的几个步骤感到困惑,以达到可以使用 /res 文件夹(itemName)中的图像设置 ImageView(iView)的程度。我唯一能想到的就是:

File file = new File(fName);

然后得到哈希码

int itemHashCode = file.HashCode() 

然后将其用作

iView.setImageResource(itemHashCode).  

那会起作用吗?或者有人知道正确的解决方案吗?

4

2 回答 2

2

放置在 res/drawable 中的图像由 AAPT 自动编译为 R.java 类中的整数映射。您可以使用以下方法在 ImageView 上设置图像:

myImageView.setImageResource(R.drawable.nameOfYourImage);

编辑:我不清楚你为什么要做你正在做的事情,但是使用图像的哈希码设置 ImageView 的资源会导致 ResourceNotFoundException。

编辑:如果您尝试能够根据与数据库中的某些数据的关联来动态设置图像,那么通过将 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);
于 2012-09-21T07:41:55.037 回答
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();
        }
}
于 2012-09-21T07:48:29.930 回答