我有一个小问题,我认为很容易被更有经验的人修复。在ImageView中,我按照自己的意愿设置了xml中的所有属性,并且显示我的图像完全正常。然后我决定制作一个imageView数组,并在每次我的应用程序中发生某些事情时更改图像。这是我之前的xml显示完全正常:
`<ImageView
android:id="@+id/questions_image_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:adjustViewBounds="true"
android:contentDescription="@string/image_q1"
android:layout_margin="16dp"
android:src="@drawable/view_groups_good"
android:layout_below="@id/score_no"/>`
在创建数组之后,我已经从xml中删除了android:src属性,并创建了我每次想要更改图像时调用的方法。
这就是我之前在onCreate上所拥有的
int [] imageAllQ = {R.drawable.view1, R.drawable.view2, R.drawable.view3, R.drawable.view4, R.drawable.view5, R.drawable.view6, R.drawable.view7, R.drawable.view8, R.drawable.view9, R.drawable.view10};
int imgCount = 0;
ImageView questionsViews;
这是方法:
public void changeImgQA (){
questionsViews = (ImageView)findViewById(R.id.questions_image_view);
questionsViews.setBackgroundResource(imageAllQ[imgCount]);
imgCount = imgCount + 1;
}
一切都按照我想要的方式工作,但现在图像视图没有考虑到xml属性而且显示的图像是扭曲的,我的意思是它在宽度上匹配父级但在高度上它是完全扭曲的,相比之下太小了我想要的。
欢迎任何建议
答案 0 :(得分:1)
使用scaleType = centerCrop
,这应该保留android:adjustViewBounds="true"
setBackGroundResource,将背景设置为给定资源。但是setImageBackground,将drawable设置为此ImageView的内容。
这就是失真的原因。
答案 1 :(得分:1)
您应该使用
questionsViews.setImageResource(imageAllQ[imgCount]);
而不是
questionsViews.setBackgroundResource(imageAllQ[imgCount]);
<强>原因强>
setImageResource是ImageView
的公共方法,负责将ImageView
的来源设置为给定资源。
将drawable设置为此ImageView的内容。
setBackgroundResource是View
的公共方法,负责将View
的背景设置为给定资源。
将背景设置为给定资源。资源应引用Drawable对象或0以删除背景。
<强>顺便说一句强>
您应该在ImageView
内初始化onCreate
,然后重新使用它,而不是每次更改图片时都调用findViewById
。