如果以编程方式设置source,则PNG文件将不会显示在ImageView中

时间:2012-06-08 17:36:44

标签: android

我的res / drawable-ldpi文件夹中有一个png文件。我正在使用模拟器在Eclipse中工作,但我在我的2.2.1 Android手机上尝试了这个,我得到了同样的行为。我有一个ImageView,我想以编程方式设置src,基于数据库调用。如果我只是把

src="@drawable.norusdpyr"

在Activity的XML文件中,文件显示正常。但是,如果我把

String imageresource = "R.drawable." + parsedData[4].toString();
chart.setImageURI(Uri.parse(imageresource));

其中parsedData [4] .toString()=“nor_usdpyr”我什么都没看到。我也试过了

String imageresource = "android.resource://" + getPackageName() + "/R.drawable." + parsedData[4].toString();
chart.setImageURI(Uri.parse(imageresource));

InputStream is = getClass().getResourceAsStream("/drawable/" + parsedData[4].toString());
chart.setImageDrawable(Drawable.createFromStream(is, ""));

String imageresource = "R.drawable." + parsedData[4].toString();   
File file = new File(imageresource);
chart.setImageDrawable(Drawable.createFromPath(file.getAbsolutePath()));

Context context = getApplicationContext();
int ResID = context.getResources().getIdentifier(imageresource, "drawable", "com.KnitCard.project");
chart.setImageResource(ResID);

最后,

chart.setImageURI(Uri.parse("android.resource://" + getPackageName() + "/R.drawable.nor_usdpyr"));

不起作用。

这些都不起作用。我究竟做错了什么?谢谢!

2 个答案:

答案 0 :(得分:1)

首先,这不应该起作用:

src="@drawable.norusdpyr"

正确的方法是:

android:src="@drawable/norusdpyr"

其次,您在XML中使用的字符串 ids 仅在XML中有效。构建资源时,所有这些字符串都将替换为各自的整数值。理想情况下,您不需要从字符串名称加载包资源。但是,如果这样做,您可以查找具有此类名称的字段,获取它所拥有的整数值,然后调用setImageResource。你对这个版本非常接近:

int ResID = context.getResources().getIdentifier(imageresource, "drawable", "com.KnitCard.project");
chart.setImageResource(ResID);

除了imageResource应该是parsedData[4].toString()且没有R.drawable.前缀。您可以使用context.getPackageName()代替对软件包名称进行硬编码。

答案 1 :(得分:0)

您还可以使用setImageDrawable()方法直接使用资源:

myImageView.setImageDrawable(context.getResources().getDrawable(R.drawable.myPngFileName));

这将避免获取ResID然后将其用于访问

的过程