138

当我以编程方式更改图像时,它会在最初在布局文件中设置的旧图像之上显示新图像?

这是我的布局文件的片段:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="39dp"
    android:gravity="center_vertical" >
    <ImageView
        android:id="@+id/qStatusImage"
        android:layout_width="16dp"
        android:layout_height="16dp"
        android:layout_margin="5dp"
        android:background="@drawable/thumbs_down"
         />

    <TextView
        android:id="@+id/grp_child"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:textColor="@color/radio_colors"
        android:textStyle="normal"
        android:background="@color/grey"
    />

 </LinearLayout>

以及设置 imageView 的代码:

     @Override
public View getChildView(final int groupPosition, final int childPosition,
        boolean isLastChild, View convertView, ViewGroup parent) {
//Answers
            if(answersGroup != null)
                   answersGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {
                       @Override
                    public void onCheckedChanged(RadioGroup group, int checkedId) {

                         //  int index = answersGroup.indexOfChild(findViewById(answersGroup.getCheckedRadioButtonId()));

                           qImageView = (ImageView) V.findViewById(R.id.qStatusImage);
                           if(ans ==0 || ans == 5){
                            //   qSV.setImageResource(0);
                               qImageView.setImageResource(R.drawable.thumbs_up);
                           }
                           else
                               qImageView.setImageResource(R.drawable.thumbs_down);

                       }
                   });

我错过了什么?

4

8 回答 8

214

发生这种情况是因为您设置的是 srcImageView而不是背景。

改用这个:

qImageView.setBackgroundResource(R.drawable.thumbs_down);

是一个讨论这两种方法之间差异的线程。

于 2013-06-03T22:03:10.860 回答
94

在 XML 中使用:

android:src="@drawable/image"

来源使用:

imageView.setImageDrawable(ContextCompat.getDrawable(activity, R.drawable.your_image));
于 2016-01-19T13:28:52.843 回答
71

简短的回答

只需将图像复制到您的res/drawable文件夹中并使用

imageView.setImageResource(R.drawable.my_image);

细节

各种各样的答案可能会引起一些混乱。我们有

名称中的方法Background都属于View类,而不是ImageView具体。但是由于ImageView继承自View你也可以使用它们。名称中带有的方法Image专门属于ImageView.

这些View方法都做同样的事情(尽管setBackgroundDrawable()已被弃用),所以我们将只关注setBackgroundResource(). 同样,这些ImageView方法都做同样的事情,所以我们只关注setImageResource(). 方法之间的唯一区别是它们传入的参数类型。

设置

这是一个FrameLayout包含一个ImageView. ImageView最初没有任何图像。(我只是添加了,FrameLayout以便我可以在它周围放置一个边框。这样你就可以看到 的边缘ImageView。)

在此处输入图像描述

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:id="@+id/frameLayout"
        android:layout_width="250dp"
        android:layout_height="250dp"
        android:background="@drawable/border"
        android:layout_centerInParent="true">

        <ImageView
            android:id="@+id/imageView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>

    </FrameLayout>
</RelativeLayout>

下面我们将比较不同的方法。

设置图像资源()

如果您使用 ImageView 的setImageResource(),则图像会保持其纵横比并调整大小以适合。这是两个不同的图像示例。

  • imageView.setImageResource(R.drawable.sky);
  • imageView.setImageResource(R.drawable.balloons);

在此处输入图像描述

设置背景资源()

setBackgroundResource()另一方面,使用 View会导致图像资源被拉伸以填充视图。

  • imageView.setBackgroundResource(R.drawable.sky);
  • imageView.setBackgroundResource(R.drawable.balloons);

在此处输入图像描述

两个都

View 的背景图片和 ImageView 的图片是分开绘制的,所以你可以同时设置它们。

imageView.setBackgroundResource(R.drawable.sky);
imageView.setImageResource(R.drawable.balloons);

在此处输入图像描述

于 2018-04-06T04:52:55.087 回答
31
qImageView.setImageResource(R.drawable.img2);

我想这会对你有所帮助

于 2016-02-29T09:07:05.333 回答
17

在 XML 设计中

android:background="@drawable/imagename 
android:src="@drawable/imagename"

通过代码绘制的图像

imageview.setImageResource(R.drawable.imagename);

服务器镜像

  ## Dependency ##

  implementation 'com.github.bumptech.glide:glide:4.7.1'
  annotationProcessor 'com.github.bumptech.glide:compiler:4.7.1'

  Glide.with(context).load(url) .placeholder(R.drawable.image)
   .into(imageView);

 ## dependency  ##
 implementation 'com.squareup.picasso:picasso:2.71828'

 Picasso.with(context).load(url) .placeholder(R.drawable.image)
 .into(imageView);
于 2017-04-17T06:40:31.093 回答
14

在图像视图的 XML 中,您已将其android:background="@drawable/thumbs_down 更改为android:src="@drawable/thumbs_down"

目前,它将该图像作为视图的背景,而不是其中的实际图像。

于 2013-06-03T22:03:03.657 回答
2

您可以使用

val drawableCompat = ContextCompat.getDrawable(context, R.drawable.ic_emoticon_happy)

或者在java中

Drawable drawableCompat = ContextCompat.getDrawable(getContext(), R.drawable.ic_emoticon_happy)
于 2018-07-17T17:29:22.007 回答
2

如果上述解决方案不起作用,只需从 XML 中删除这一整行

android:src="@drawable/image"

&只尝试

imageView.setBackgroundResource(R.drawable.image);
于 2020-12-01T06:31:57.980 回答