更改ImageView源

nou*_*ine 239 android imageview android-imageview

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

   <ImageView 
      android:id="@+id/articleImg"
      style="@style/articleImgSmall_2"
      android:src="@drawable/default_m" />
Run Code Online (Sandbox Code Playgroud)

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

myImgView.setBackgroundResource(R.drawable.monkey);
Run Code Online (Sandbox Code Playgroud)

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

我怎样才能做到这一点?

Jor*_*sys 592

更改ImageView源:

使用setBackgroundResource()方法:

  myImgView.setBackgroundResource(R.drawable.monkey);
Run Code Online (Sandbox Code Playgroud)

你把那只猴子放在后台.

我建议使用setImageResource()方法:

  myImgView.setImageResource(R.drawable.monkey);
Run Code Online (Sandbox Code Playgroud)

或用setImageDrawable()方法:

myImgView.setImageDrawable(getResources().getDrawable(R.drawable.monkey));
Run Code Online (Sandbox Code Playgroud)

***新的Android API 22 getResources().getDrawable()现已弃用.这是一个如何使用现在的例子:

myImgView.setImageDrawable(getResources().getDrawable(R.drawable.monkey, getApplicationContext().getTheme()));
Run Code Online (Sandbox Code Playgroud)

以及如何验证旧的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));
}
Run Code Online (Sandbox Code Playgroud)

  • `ContextCompat` 在没有 `getTheme` 的情况下获取可绘制对象 (2认同)

Dav*_*und 48

你应该使用setImageResource而不是setBackgroundResource.

  • [两者的比较](/sf/ask/505517141/) (3认同)

PIR*_*HAH 29

myImgView.setImageResource(R.drawable.monkey);
Run Code Online (Sandbox Code Playgroud)

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

((ImageView) v.findViewById(R.id.ImageView1)).setImageResource(0);
Run Code Online (Sandbox Code Playgroud)

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


Neh*_*kla 18

获取ImageView的ID为

ImageView imgFp = (ImageView) findViewById(R.id.imgFp);
Run Code Online (Sandbox Code Playgroud)

然后使用

imgFp.setImageResource(R.drawable.fpscan);
Run Code Online (Sandbox Code Playgroud)

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


rad*_*aun 8

或试试这个.对我来说它工作得很好:

imageView.setImageDrawable(ContextCompat.getDrawable(this, image));
Run Code Online (Sandbox Code Playgroud)


Sur*_*gch 7

补充视觉答案

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

在此处输入图片说明

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

在此处输入图片说明

两个都

在此处输入图片说明

我更完整的答案在这里


Com*_*ode 5

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

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