更改ImageView源


257

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

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

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

myImgView.setBackgroundResource(R.drawable.monkey);

它可以工作,但是我注意到android将新图像堆叠在旧图像之上(不要问我如何发现它与讨论无关:)。在设置新图像之前,我绝对需要摆脱旧的图像。

我该如何实现?

Answers:


634

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

哦,很酷……很不幸,我刚刚发现我还需要用myImgView.setImageDrawable(img)替换图像集;您建议的代码myImgView.setImageResource(R.drawable.monkey); 无法做到这一点。在渲染猴子之前如何摆脱可绘制对象?:)非常感谢
nourdine

1
现在已弃用getDrawable(int)并在API-21中添加了getDrawable(int,theme)。现在该怎么办?您能否更新您的答案?
mubeen

调用需要API级别16(当前最小值为13):android.widget.ImageView#setBackground
Iman Marashi

ContextCompat无需绘制即可获取getTheme
过期


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

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

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

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


18

获取ImageView的ID为

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

然后使用

imgFp.setImageResource(R.drawable.fpscan);

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


8

或尝试这个。对我来说,一切正常:

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

5

补充视觉答案

ImageView:(setImageResource()标准方法,保持宽高比)

在此处输入图片说明

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

在此处输入图片说明

在此处输入图片说明

我的完整答案在这里


3

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

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


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();
        }
    }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.