在 Android 中以编程方式更改 ImageView 的图像
Posted
技术标签:
【中文标题】在 Android 中以编程方式更改 ImageView 的图像【英文标题】:Change Image of ImageView programmatically in Android 【发布时间】:2013-05-30 04:21:41 【问题描述】:当我以编程方式更改图像时,它会在最初在布局文件中设置的旧图像之上显示新图像?
这是我的布局文件的 sn-p:
<LinearLayout
android:layout_
android:layout_
android:gravity="center_vertical" >
<ImageView
android:id="@+id/qStatusImage"
android:layout_
android:layout_
android:layout_margin="5dp"
android:background="@drawable/thumbs_down"
/>
<TextView
android:id="@+id/grp_child"
android:layout_
android:layout_
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);
);
我错过了什么?
【问题讨论】:
【参考方案1】:如果上述解决方案不起作用,只需从 XML 中删除这一整行
android:src="@drawable/image"
&只尝试
imageView.setBackgroundResource(R.drawable.image);
【讨论】:
【参考方案2】:你可以使用
val drawableCompat = ContextCompat.getDrawable(context, R.drawable.ic_emoticon_happy)
或者在java中java
Drawable drawableCompat = ContextCompat.getDrawable(getContext(), R.drawable.ic_emoticon_happy)
【讨论】:
【参考方案3】:在 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);
【讨论】:
【参考方案4】:简答
只需将图像复制到您的res/drawable
文件夹并使用
imageView.setImageResource(R.drawable.my_image);
详情
答案的多样性可能会引起一些混乱。我们有
setBackgroundResource()
setBackgroundDrawable()
setBackground()
setImageResource()
setImageDrawable()
setImageBitmap()
名称中带有Background
的方法都属于View
类,而不是具体属于ImageView
。但由于ImageView
继承自View
,您也可以使用它们。名称中带有Image
的方法专门属于ImageView
。
View
方法都做同样的事情(尽管setBackgroundDrawable()
已被弃用),所以我们只关注setBackgroundResource()
。同样,ImageView
方法都做同样的事情,所以我们只关注setImageResource()
。方法之间的唯一区别是它们传入的参数类型。
设置
这是一个包含ImageView
的FrameLayout
。 ImageView
最初没有任何图像。 (我只添加了FrameLayout
,这样我就可以在它周围加上一个边框。这样你就可以看到ImageView
的边缘。)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_>
<FrameLayout
android:id="@+id/frameLayout"
android:layout_
android:layout_
android:background="@drawable/border"
android:layout_centerInParent="true">
<ImageView
android:id="@+id/imageView"
android:layout_
android:layout_/>
</FrameLayout>
</RelativeLayout>
下面我们将比较不同的方法。
setImageResource()
如果您使用 ImageView 的 setImageResource()
,则图像会保持其纵横比并调整大小以适合。这是两个不同的图像示例。
imageView.setImageResource(R.drawable.sky);
imageView.setImageResource(R.drawable.balloons);
setBackgroundResource()
另一方面,使用 View 的 setBackgroundResource()
会导致图像资源被拉伸以填充视图。
imageView.setBackgroundResource(R.drawable.sky);
imageView.setBackgroundResource(R.drawable.balloons);
两者
View的背景图片和ImageView的图片是分开绘制的,可以同时设置。
imageView.setBackgroundResource(R.drawable.sky);
imageView.setImageResource(R.drawable.balloons);
【讨论】:
注意以下关于setImageResource
:Sets a drawable as the content of this ImageView. This does Bitmap reading and decoding on the UI thread, which can cause a latency hiccup. If that's a concern, consider using setImageDrawable(Drawable) or setImageBitmap(Bitmap) and android.graphics.BitmapFactory instead.
很好的解释@Suragch【参考方案5】:
qImageView.setImageResource(R.drawable.img2);
我想这会对你有所帮助
【讨论】:
【参考方案6】:在 XML 中使用:
android:src="@drawable/image"
来源使用:
imageView.setImageDrawable(ContextCompat.getDrawable(activity, R.drawable.your_image));
【讨论】:
【参考方案7】:这是因为您设置了 ImageView
的 src 而不是背景。
改用这个:
qImageView.setBackgroundResource(R.drawable.thumbs_down);
Here 的帖子讨论了这两种方法之间的区别。
【讨论】:
这在 API 14 中不起作用。应该使用:image.setImageResource(R.drawable.icon_dot1);
@Brave 的回答是正确的。使用setBackgroundResource()
:( 在使用新图像之前没有删除现有图像.. 所以我有两个图像在那里碰撞。setImageResource()
工作寿 :)。仍然 .. 这篇文章让我走上了正轨——感谢您的两个回答!
正如@mricyicy 的回答所说,问题在于 xml 正在定义背景图像,而代码正在更改资源图像。那些不一样。设置资源图像是这里实际需要的,所以xml应该是固定的。
为什么不setImageResource
?
@VioletGiraffe ImageView.setImageResource(R.drawable.image);
为我工作【参考方案8】:
在图像视图的 XML 中,您有 android:background="@drawable/thumbs_down
把它改成android:src="@drawable/thumbs_down"
目前它将该图像作为视图的背景,而不是其中的实际图像。
【讨论】:
以上是关于在 Android 中以编程方式更改 ImageView 的图像的主要内容,如果未能解决你的问题,请参考以下文章
在recyclerview android中以编程方式更改布局管理器