更改ImageView源

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

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

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

myImgView.setBackgroundResource(R.drawable.monkey);

它的工作,但我注意到android堆栈的新图像在旧的(不要问我是如何发现它与讨论无关:)。在设置新图像之前,我肯定需要去掉旧的。

我怎样才能做到呢?

354686 次浏览

你应该使用setImageResource而不是setBackgroundResource

更改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.setImageResource(R.drawable.monkey);

用于设置当前图像视图中的图像,但如果要删除该图像 然后你可以使用如下代码:

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

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

获取ImageView的ID为

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

然后使用

imgFp.setImageResource(R.drawable.fpscan);

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

如果你想在imageview中设置一个产生dirs中的图像,你可以这样做:

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

或者试试这个。对我来说,它工作得很好:

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

补充视觉回答

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

enter image description here

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

enter image description here

这两个

enter image description here

我更完整的答案是在这里

只需要写一个改变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();
}
}
}