303

ImageView使用以下语法在 xml 中设置了源图像:

   <ImageView 
      android:id="@+id/articleImg"
      style="@style/articleImgSmall_2"
      android:src="@drawable/default_m" />

现在我需要以编程方式更改此图像。我需要做的是删除旧图像并添加一个新图像。我所做的是这样的:

myImgView.setBackgroundResource(R.drawable.monkey);

它有效,但我注意到 android 将新图像堆叠在旧图像之上(不要问我如何发现它与讨论无关:)。在设置新图像之前,我肯定需要摆脱旧图像。

我怎样才能做到这一点?

4

8 回答 8

724

更改 ImageView 源:

使用setBackgroundResource()方法:

  myImgView.setBackgroundResource(R.drawable.monkey);

你把那只猴子放在背景中。

我建议使用setImageResource()方法:

  myImgView.setImageResource(R.drawable.monkey);

或使用setImageDrawable()方法:

myImgView.setImageDrawable(getResources().getDrawable(R.drawable.monkey));

getResources().getDrawable()***现在不推荐使用新的 android API 22 。这是一个现在如何使用的示例:

myImgView.setImageDrawable(getResources().getDrawable(R.drawable.monkey, getApplicationContext().getTheme()));

以及如何验证旧 API 版本:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
     myImgView.setImageDrawable(getResources().getDrawable(R.drawable.monkey, getApplicationContext().getTheme()));
   } else {
     myImgView.setImageDrawable(getResources().getDrawable(R.drawable.monkey));
}
于 2010-06-04T14:12:20.793 回答
64

你应该使用setImageResource而不是setBackgroundResource.

于 2010-06-04T14:10:26.707 回答
33
myImgView.setImageResource(R.drawable.monkey);

用于在当前图像视图中设置图像,但如果要删除此图像,则可以使用以下代码:

((ImageView) v.findViewById(R.id.ImageView1)).setImageResource(0);

现在这将从您的图像视图中删除图像,因为它已将资源值设置为零。

于 2012-06-01T03:09:31.607 回答
18

获取 ImageView 的 ID 为

ImageView imgFp = (ImageView) findViewById(R.id.imgFp);

然后使用

imgFp.setImageResource(R.drawable.fpscan);

以编程方式而不是从 XML 设置源图像。

于 2014-05-22T11:08:48.273 回答
9

补充视觉答案

ImageView:(setImageResource()标准方法,保持纵横比)

在此处输入图像描述

View:(setBackgroundResource()图像被拉伸)

在此处输入图像描述

两个都

在此处输入图像描述

我更完整的答案在这里

于 2018-04-06T05:29:50.437 回答
9

或者试试这个。对我来说它工作正常:

imageView.setImageDrawable(ContextCompat.getDrawable(this, image));
于 2016-08-18T14:32:31.147 回答
3

如果要在 imageview 中设置mipmap 目录中的图像,可以这样做:

myImageView.setImageDrawable(getResources().getDrawable(R.mipmap.my_picture)

于 2016-01-08T21:05:47.430 回答
2

只写一个改变imageview的方法

public void setImage(final Context mContext, final ImageView imageView, int picture)
{
    if (mContext != null && imageView != null)
    {
        try
        {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
            {
                imageView.setImageDrawable(mContext.getResources().getDrawable(picture, mContext.getApplicationContext().getTheme()));
            } else
            {
                imageView.setImageDrawable(mContext.getResources().getDrawable(picture));
            }
        } catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}
于 2018-06-29T06:58:56.713 回答