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

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

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

myImgView.setBackgroundResource(R.drawable.monkey);

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

我怎样才能做到呢?


当前回答

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

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

其他回答

补充视觉回答

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

查看:setBackgroundResource()(图片拉伸)

Both

我更完整的答案在这里。

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

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

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

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

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

获取ImageView的ID为

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

然后使用

imgFp.setImageResource(R.drawable.fpscan);

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