当我以编程方式更改图像时,它会在最初在布局文件中设置的旧图像上显示新图像?
以下是我的布局文件的片段:
<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);
}
});
我错过了什么?
答案 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);
各种答案可能会引起一些混乱。我们有
setBackgroundResource()
setBackgroundDrawable()
setBackground()
setImageResource()
setImageDrawable()
setImageBitmap()
名称中包含Background
的方法都属于View
类,而不属于ImageView
。但是,由于ImageView
继承自View
,您也可以使用它们。名称中包含Image
的方法专门针对ImageView
。
View
方法彼此都做同样的事情(虽然不推荐setBackgroundDrawable()
),所以我们只关注setBackgroundResource()
。同样,ImageView
方法也都做同样的事情,所以我们只关注setImageResource()
。方法之间的唯一区别是它们传入的参数类型。
以下是包含FrameLayout
的{{1}}。 ImageView
最初没有任何图片。 (我只添加了ImageView
,以便我可以在其周围添加边框。这样您就可以看到FrameLayout
的边缘了。)
ImageView
下面我们将比较不同的方法。
如果您使用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);
另一方面,使用View的imageView.setImageResource(R.drawable.balloons);
会导致图像资源被拉伸以填充视图。
setBackgroundResource()
imageView.setBackgroundResource(R.drawable.sky);
View的背景图像和ImageView的图像是分开绘制的,因此您可以同时设置它们。
imageView.setBackgroundResource(R.drawable.balloons);
答案 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);