Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否有一种方法可以为同一ImageView使用多个源?_Java_Android_Xml - Fatal编程技术网

Java 是否有一种方法可以为同一ImageView使用多个源?

Java 是否有一种方法可以为同一ImageView使用多个源?,java,android,xml,Java,Android,Xml,我正在尝试使用一个显示数组中随机对象的活动。此对象是从意图传入的 我试图为每个对象使用一个图像,然后为正确的对象显示正确的图像 到目前为止,我一直在使用drawable文件夹保存图像,然后通过XML将它们加载到中,但是这阻止了我对同一ImageView使用多个图像。 我尝试使用imageview.setImageResourceR.drawable.imagename;但出于某种原因,这似乎不喜欢加载。 在这种情况下,是否需要为每个对象创建新活动 @Override protected void

我正在尝试使用一个显示数组中随机对象的活动。此对象是从意图传入的

我试图为每个对象使用一个图像,然后为正确的对象显示正确的图像

到目前为止,我一直在使用drawable文件夹保存图像,然后通过XML将它们加载到中,但是这阻止了我对同一ImageView使用多个图像。 我尝试使用imageview.setImageResourceR.drawable.imagename;但出于某种原因,这似乎不喜欢加载。 在这种情况下,是否需要为每个对象创建新活动

@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一样。抱歉,我没有意识到它必须是文件名而不是扩展名,我现在已经更改了它,效果非常好。非常感谢。