当前位置: 首页 > 知识库问答 >
问题:

在Android中以编程方式更改ImageView的图像

盖和洽
2023-03-14

当我以编程方式更改图像时,它会在原来在布局文件中设置的旧图像的顶部显示新图像?

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

<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);

                       }
                   });

我错过了什么?

共有3个答案

卢文博
2023-03-14

只需复制一个图像到您的文件夹中,然后使用

imageView.setImageResource(R.drawable.my_image);

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

  • setBackgroundResource()

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

View方法彼此都执行相同的操作(尽管不建议使用setBackground Drawable()),因此我们将只关注setBackground Resources()。类似地,ImageView方法都做同样的事情,所以我们只关注setImageResources()。这些方法之间的唯一区别是它们传递的参数类型。

这是一个FrameLayout,其中包含一个ImageViewImageView最初没有任何图像。(我只添加了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.setImageResources(R.drawable.sky);
  • ImageView.setImageResources(R.drawable.balloons);

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

  • imageView。挫折地面资源(R.可绘制天空)

视图的背景图像和ImageView的图像是分别绘制的,因此您可以同时设置它们。

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

章子航
2023-03-14

在XML中使用:

android:src="@drawable/image"

来源和用途:

imageView.setImageDrawable(ContextCompat.getDrawable(activity, R.drawable.your_image));
卢杰
2023-03-14

发生这种情况是因为您正在设置ImageView的src,而不是背景。

改用这个:

qImageView.setBackgroundResource(R.drawable.thumbs_down);

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

 类似资料:
  • 我需要通过编程方式改变图标的色彩

  • 我正在将图像设置为ImageView,但是图像不是从设备存储中拾取的,图像是由服务器发送的,我想在将图像设置到ImageView之前了解图像的方向。因此,是否可以使用其url和ExifInterface检查来自服务器的jpg图像的方向,然后根据需要更改其方向以设置为imageview?

  • 问题内容: 我发现了只在Android N设备上才能复制的真正奇怪的错误。 在浏览我的应用程序时,可以更改语言。这是更改它的代码。 该代码在我的巡回活动(带电话)中效果很好,但是在接下来的所有活动中,所有String资源都是错误的。屏幕旋转将其修复。我该怎么办?我应该以其他方式更改Android N的语言环境还是仅仅是系统错误? PS这是我发现的。第一次启动MainActivity时(在​​我的旅

  • 我做了一个均衡器来配合我的应用程序,但我不确定如何改变搜索栏的拇指和进度颜色。默认情况下,它似乎是粉红色的,这不符合我的应用程序的美学。

  • 问题内容: 如何更改应用程序标签以更改从android中的Java代码显示的应用程序名称?我指的是: 在Android清单中 有什么方法可以更新 strings.xml 文件中的值? 问题答案: 目前尚不可能。它是AndroidManifest.xml文件中的固定字符串,无法在运行时更改。

  • 问题内容: 如何以编程方式更改ActionBar中的MenuItem图标?我尝试使用 但这不起作用。这是我的代码: 主要活动 main.xml activity_main 这是我跑步后遇到的例外: 问题答案: 您不能在onCreate()的菜单项上使用findViewById(),因为菜单布局尚未膨胀。您可以创建一个全局Menu变量,并在onCreateOptionsMenu()中对其进行初始化,