有没有办法为同一个ImageView使用多个源?

时间:2019-04-02 16:13:07

标签: java android xml

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

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

到目前为止,我一直在使用drawable文件夹保存图像,然后通过XML加载它们,但是这使我无法对同一ImageView使用多个图像。 我尝试使用imageview.setImageResource(R.drawable.imagename);但是由于某种原因,它似乎并不喜欢加载。 在这种情况下,是否需要为每个对象进行新的活动?

Banana Apple Pear
$var1 $var2 $var3

字节到位图方法

@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;
}

1 个答案:

答案 0 :(得分:1)

正如@XavierFalempin所评论的那样,您无法通过文件流访问资源。使用setImageResource()应该可以。在this answer之后,您的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());
}