我的Android应用程序中的drawable文件夹中有170张图片。我有一个显示所有这些活动的活动。想要做的是将点击的图像视图传递给另一个活动(Zoom_activity),用户可以在其中放大并使用它。我该如何实现?
所有图像均为500x500px。所以我想不到将它们解码为Bitmaps并通过Intent传递Btmaps。请建议一个更好,更简单的方法来做到这一点!我已经看过其他答案了,但没有一个能解决我的问题。
这是我的代码:
Activity_1.java
Intent startzoomactivity = new Intent(Activity_one.this, Zoom_Image.class);
String img_name = name.getText().toString().toLowerCase(); //name is a textview which is in refrence to the imageview.
startzoomactivity.putExtra("getimage", img_name);
startActivity(startzoomactivity);
Zoom_Activity.java
Intent startzoomactivity = getIntent();
String img_res = getIntent().getStringExtra("getimage");
String img_fin = "R.drawable."+img_res;
img.setImageResource(Integer.parseInt(img_fin));
错误:应用程序关闭
请帮我解决这个问题!
谢谢!
答案 0 :(得分:1)
Integer.parseInt()
仅适用于“1”或“123”之类的字符串,它们实际上只包含整数的字符串表示形式。
您需要的是通过名称找到可绘制资源。
这可以使用反射来完成:
String name = "image_0";
final Field field = R.drawable.getField(name);
int id = field.getInt(null);
Drawable drawable = getResources().getDrawable(id);
或使用Resources.getIdentifier()
:
String name = "image_0";
int id = getResources().getIdentifier(name, "drawable", getPackageName());
Drawable drawable = getResources().getDrawable(id);
答案 1 :(得分:0)
你在尝试的是错的。您无法将"R.drawable.name"
转换为Integer.parseInt
。 Integer.parseInt期待"100"
之类的东西。你应该使用
getIdentifier(img_fin, "drawable", getPackageName());
检索您要查找的资源ID
答案 2 :(得分:0)
使用getResources().getIdentifier
从ImageView中的Drawable加载图像:
int img_id = getResources().getIdentifier(img_res, "drawable", getPackageName());
img.setImageResource(img_id);