ImageView数组不保持纵横比

时间:2017-03-18 16:46:19

标签: java android arrays android-imageview

我有一个小问题,我认为很容易被更有经验的人修复。在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属性而且显示的图像是扭曲的,我的意思是它在宽度上匹配父级但在高度上它是完全扭曲的,相比之下太小了我想要的。

欢迎任何建议

2 个答案:

答案 0 :(得分:1)

使用scaleType = centerCrop,这应该保留android:adjustViewBounds="true"

的宽高比

setBackGroundResource,将背景设置为给定资源。但是setImageBackground,将drawable设置为此ImageView的内容。

这就是失真的原因。

答案 1 :(得分:1)

您应该使用

questionsViews.setImageResource(imageAllQ[imgCount]);

而不是

questionsViews.setBackgroundResource(imageAllQ[imgCount]);

<强>原因

setImageResourceImageView的公共方法,负责将ImageView的来源设置为给定资源。

  

将drawable设置为此ImageView的内容。

setBackgroundResourceView的公共方法,负责将View的背景设置为给定资源。

  

将背景设置为给定资源。资源应引用Drawable对象或0以删除背景。

<强>顺便说一句

您应该在ImageView内初始化onCreate,然后重新使用它,而不是每次更改图片时都调用findViewById