更改ImageView的源

328

我有一个ImageView,在XML中使用以下语法设置源图像:

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

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

myImgView.setBackgroundResource(R.drawable.monkey);

它可以工作,但我注意到Android将新图像堆叠在旧图像之上(不要问我是如何发现的,这与讨论无关 :)。在设置新图像之前,我一定需要清除旧图像。

我该如何实现这一点?

8个回答

771

更改ImageView的资源:

使用setBackgroundResource()方法:

  myImgView.setBackgroundResource(R.drawable.monkey);

你把那只猴子放到了后台。

我建议使用setImageResource()方法:

  myImgView.setImageResource(R.drawable.monkey);

或者使用setImageDrawable()方法:

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

*** 在新的Android API 22中,getResources().getDrawable()已经被弃用。现在是使用它的示例:

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

哦,太酷了...不幸的是,我刚刚发现我还需要用以下代码替换图像集:myImgView.setImageDrawable(img);你建议的这段代码myImgView.setImageResource(R.drawable.monkey);无法实现。在呈现猴子之前,我该如何删除drawable?非常感谢。 - nourdine
1
getDrawable(int)现在已经被弃用,而getDrawable(int,theme)则在API-21中被添加。现在该怎么办?请更新您的答案。 - mubeen
调用需要 API 级别 16(当前最低级别为 13):android.widget.ImageView#setBackground - Iman Marashi
2
ContextCompat to get drawable without getTheme - Outofdate
现在,不要再使用getResources().getDrawable(...),而是使用ResourcesCompat.getDrawable(getResources(), ...) - Nishant Jalan
最新的方法是使用以下代码:yourImageView.setImageDrawable(ContextCompat.getDrawable(context, yourImage)); - Ashraf Amin

73

你应该使用 setImageResource 代替 setBackgroundResource


6
两者的比较ImageView.setBackgroundResource()ImageView.setImageResouce()是Android中用于设置ImageView控件背景图和前景图的两个方法。其中,setBackgroundResource()方法将指定的资源文件设置为ImageView的背景图像,而setImageResource()方法则将指定的资源文件设置为ImageView的前景图像。需要注意的是,如果需要在运行时动态地改变ImageView控件的背景或前景图像,则应使用setImageResource()方法。另外,如果需要显示具有透明度的图像,则应该使用setImageResource()方法。 - Suragch

36
myImgView.setImageResource(R.drawable.monkey);

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

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

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


22

获取 ImageView 的 ID,代码如下:

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

然后使用

imgFp.setImageResource(R.drawable.fpscan);

通过编程设置源图像,而不是从XML中设置。


17

补充视觉答案

ImageView: 使用 setImageResource() 方法(标准方法,保持长宽比)

在此输入图片描述

View: 使用 setBackgroundResource() 方法(图片会被拉伸)

在此输入图片描述

两种方式都可以使用

在此输入图片描述

我的详细回答在这里


13

或者尝试这个。对我来说它很好用:

imageView.setImageDrawable(ContextCompat.getDrawable(this, image));

5
如果您想将位于mipmap目录中的图片设置到ImageView中,可以像这样操作: myImageView.setImageDrawable(getResources().getDrawable(R.mipmap.my_picture))

4

编写一个更改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();
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接