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

时间:2013-06-03 21:58:05

标签: android imageview

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

以下是我的布局文件的片段:

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

                       }
                   });

我错过了什么?

8 个答案:

答案 0 :(得分:147)

之所以发生这种情况,是因为您要设置ImageView的src而不是背景。

请改用:

qImageView.setBackgroundResource(R.drawable.thumbs_down);

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

答案 1 :(得分:60)

在XML中使用:

android:src="@drawable/image"

来源使用:

imageView.setImageDrawable(ContextCompat.getDrawable(activity, R.drawable.your_image));

答案 2 :(得分:25)

qImageView.setImageResource(R.drawable.img2);

我认为这会对你有帮助

答案 3 :(得分:21)

简短回答

只需将图片复制到res/drawable文件夹中即可使用

imageView.setImageResource(R.drawable.my_image);

详细

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

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

View方法彼此都做同样的事情(虽然不推荐setBackgroundDrawable()),所以我们只关注setBackgroundResource()。同样,ImageView方法也都做同样的事情,所以我们只关注setImageResource()。方法之间的唯一区别是它们传入的参数类型。

设置

以下是包含FrameLayout的{​​{1}}。 ImageView最初没有任何图片。 (我只添加了ImageView,以便我可以在其周围添加边框。这样您就可以看到FrameLayout的边缘了。)

enter image description here

ImageView

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

setImageResource()

如果您使用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> ,则图像会保持其宽高比并调整大小以适应。这是两个不同的图像示例。

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

enter image description here

setBackgroundResource()

另一方面,使用View的imageView.setImageResource(R.drawable.balloons);会导致图像资源被拉伸以填充视图。

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

enter image description here

两个

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

imageView.setBackgroundResource(R.drawable.balloons);

enter image description here

答案 4 :(得分:13)

在图片视图的XML中,您有android:background="@drawable/thumbs_down的位置 将其更改为android:src="@drawable/thumbs_down"

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

答案 5 :(得分:7)

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

答案 6 :(得分:0)

您可以使用

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

或使用Java java

Drawable drawableCompat = ContextCompat.getDrawable(getContext(), R.drawable.ic_emoticon_happy)

答案 7 :(得分:0)

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

android:src="@drawable/image"

&仅尝试

imageView.setBackgroundResource(R.drawable.image);