【问题标题】:Changing ImageView source更改 ImageView 源
【发布时间】:2011-02-27 19:50:04
【问题描述】:

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

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

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

myImgView.setBackgroundResource(R.drawable.monkey);

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

我怎样才能做到这一点?

【问题讨论】:

    标签: android imageview android-imageview


    【解决方案1】:

    更改 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);是做不到的。如何在渲染猴子之前摆脱可绘制对象? :) 非常感谢
    • getDrawable(int) 现在已弃用,getDrawable(int,theme) 已添加到 API-21 中。现在该怎么办?你能更新你的答案吗?
    • 调用需要 API 级别 16(当前最低为 13):android.widget.ImageView#setBackground
    • ContextCompat 在没有 getTheme 的情况下可以绘制
    • 现在,使用getResouces().getDrawable(...),而不是ResourcesCompat.getDrawable(getResources(), ...)
    【解决方案2】:

    您应该使用setImageResource 而不是setBackgroundResource

    【讨论】:

    【解决方案3】:
    myImgView.setImageResource(R.drawable.monkey);
    

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

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

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

    【讨论】:

      【解决方案4】:

      获取 ImageView 的 ID 为

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

      然后使用

      imgFp.setImageResource(R.drawable.fpscan);
      

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

          补充视觉答案

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

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

          两者

          我更完整的答案是here

          【讨论】:

            【解决方案7】:

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

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

            【讨论】:

              【解决方案8】:

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

              【讨论】:

                猜你喜欢
                • 2013-11-01
                • 1970-01-01
                • 2013-12-21
                • 2012-06-21
                • 2011-06-19
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多