Java 是否有一种方法可以为同一ImageView使用多个源?
我正在尝试使用一个显示数组中随机对象的活动。此对象是从意图传入的 我试图为每个对象使用一个图像,然后为正确的对象显示正确的图像 到目前为止,我一直在使用drawable文件夹保存图像,然后通过XML将它们加载到中,但是这阻止了我对同一ImageView使用多个图像。 我尝试使用imageview.setImageResourceR.drawable.imagename;但出于某种原因,这似乎不喜欢加载。 在这种情况下,是否需要为每个对象创建新活动Java 是否有一种方法可以为同一ImageView使用多个源?,java,android,xml,Java,Android,Xml,我正在尝试使用一个显示数组中随机对象的活动。此对象是从意图传入的 我试图为每个对象使用一个图像,然后为正确的对象显示正确的图像 到目前为止,我一直在使用drawable文件夹保存图像,然后通过XML将它们加载到中,但是这阻止了我对同一ImageView使用多个图像。 我尝试使用imageview.setImageResourceR.drawable.imagename;但出于某种原因,这似乎不喜欢加载。 在这种情况下,是否需要为每个对象创建新活动 @Override protected void
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_random_race);
TextView name = (TextView)findViewById(R.id.raceName);
Intent secondIntent = getIntent();
Race message = (Race)secondIntent.getSerializableExtra("RACE");
ImageView image = (ImageView) findViewById(R.id.raceImage);
image.setImageResource(R.drawable.hacan);
image.setImageBitmap(imageToBitmapImage(message, image));
name.setText(message.getName());
}
字节到位图方法
public Bitmap imageToBitmapImage (Race message, ImageView image){
Bitmap bmp;
try {
FileInputStream in = new FileInputStream(message.getImageName());
BufferedInputStream buffer = new BufferedInputStream(in);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int input = buffer.read();
while (input != -1){
baos.write(input);
input = buffer.read();
}
byte[] bytes = baos.toByteArray();
bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
return bmp;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
我所说的每个对象的类
public class Race implements Serializable {
private String name;
private String imageName; //name of file within drawable
正如@XavierFalempin所评论的,您不能通过文件流访问资源。使用setImageResource应该可以工作。遵循onCreate方法应该如下所示:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_random_race);
TextView name = (TextView)findViewById(R.id.raceName);
Intent secondIntent = getIntent();
Race message = (Race)secondIntent.getSerializableExtra("RACE");
ImageView image = (ImageView) findViewById(R.id.raceImage);
image.setImageResource(getResources().getIdentifier(message.getImageName(),
"drawable",
getPackageName()));
name.setText(message.getName());
}
您应该选择使用setImageResource还是setImageBitmap。关于imageToBitmapImage函数,您的FileInputStream将读取手机上应用程序文件夹中的数据,但无法读取您放入项目中的绘图。你检查过没有记录一些异常吗?@XavierFalempin我现在检查过了,它给出了一个找不到的文件。我可以把这些图片放在哪里,以便参考它们?我还是Android新手,所以如果这是一个基本问题,我深表歉意。Svarr答案应该有效,但您也可以在pojo中使用可绘制id值int,而不是名称感谢Svarr的帮助,不幸的是,这并没有解决我遇到的问题。然后我误解了。您的问题到底是什么?我正在尝试基于Race.getImageName(文件路径)在活动中显示图像。我从两个活动之间的意图中得到了这个结果,但是我似乎无法根据我一直使用的文件路径更改第二个活动中的ImageView。这可能是清单或活动XML问题。能否为getImageName提供一个示例值?对于我的解决方案,我希望它只是一个没有扩展名的文件名,就像你的例子中的hacan一样。抱歉,我没有意识到它必须是文件名而不是扩展名,我现在已经更改了它,效果非常好。非常感谢。