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


}
});

我错过了什么?

324267 次浏览

在图像视图的 XML 中,其中有 android:background="@drawable/thumbs_down 改成 android:src="@drawable/thumbs_down"

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

这是因为您正在设置 ImageView的 src 而不是背景。

用这个代替:

qImageView.setBackgroundResource(R.drawable.thumbs_down);

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

在 XML 中使用:

android:src="@drawable/image"

资料来源:

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

我觉得这个能帮到你

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

长话短说

只要复制一个图像到您的 res/drawable文件夹和使用

imageView.setImageResource(R.drawable.my_image);

细节

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

名称中包含 Background的方法都属于 View类,而不是专门属于 ImageView类。但是因为 ImageView继承自 View,所以你也可以使用它们。名称中包含 Image的方法特别属于 ImageView

View方法彼此做相同的事情(尽管 setBackgroundDrawable()不被推荐) ,所以我们只关注 setBackgroundResource()。类似地,ImageView方法都做同样的事情,所以我们只关注 setImageResource()。这两个方法之间的唯一区别是它们传入的参数的类型。

设置

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

enter image description here

<?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(),则图像保持其长宽比,并调整大小以适应。下面是两个不同的图像示例。

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

enter image description here

SetBackground 资源()

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

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

enter image description here

都有

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

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

enter image description here

你可以用

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

或者用爪哇咖啡

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

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

android:src="@drawable/image"

(只要努力)

imageView.setBackgroundResource(R.drawable.image);

在 Java 中,我们可以像这样通过编程方式更改 ImageView。

ImageView imageView= (ImageView)findViewById(R.id.imageView);
imageView.setImageResource(R.drawable.imagename);

在 Kotlin

val imageView: ImageView = findViewById(R.id.imageView)
imageView.setImageResource(R.drawable.imagename)