我想扩展一个位于RelativeLayout内部的ImageView。我希望它的宽度填满父容器,同时保持图像的纵横比。这听起来很像我可以在XML布局文件中使用centerCrop。区别在于,我不想让图像居中对齐。我想要的是将图像与父容器顶部对齐,将图像底部多余的部分裁剪掉。
以下是XML代码:
这段代码的结果与设置
输出很奇怪。它显示图像视图的宽度与屏幕相同:
以下是XML代码:
<RelativeLayout
android:background="#f00"
android:id="@+id/skyline_header"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="25">
<ImageView
android:id="@+id/bg_image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/bg_img"/>
</RelativeLayout>
这是我的代码:
final RelativeLayout headerContainer = (RelativeLayout) view.findViewById(R.id.skyline_header);
final ImageView iv = (ImageView) view.findViewById(R.id.bg_image);
ViewTreeObserver vto = headerContainer.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
headerContainer.getViewTreeObserver().removeOnGlobalLayoutListener(this);
double imgAspectRatio = (double)iv.getMeasuredWidth() / (double)iv.getMeasuredHeight();
int screenWidth = getActivity().getResources().getDisplayMetrics().widthPixels;
Log.d("tag", Integer.toString(iv.getMeasuredWidth()));
Log.d("tag", Integer.toString(iv.getMeasuredHeight()));
Log.d("tag", Double.toString(imgAspectRatio));
Log.d("tag", Integer.toString(screenWidth));
int newHeight = (int) ((double)screenWidth * imgAspectRatio);
img.setLayoutParams(new RelativeLayout.Layout(screenWidth, newHeight));
img.requestLayout();
}
});
这段代码的结果与设置
scaleType="fitCenter"
完全相同。它填充了容器的高度,将图像居中,并在左右留有边距。输出很奇怪。它显示图像视图的宽度与屏幕相同:
希望这能在概念上传达我现在所拥有的东西。 我希望图片能够拉伸以填满整个水平空间(没有可见的红色留下),但不要让游泳者看起来异常宽大(即保持纵横比不变)。游泳者下方的水可以根据需要进行裁剪以满足前两个要求。1440
562
2.5622775800711746
1440
width
与父元素的width
匹配 (android:layout_width=match_parent
&& 没有 padding),并且scaleType
的默认值是fitCenter
,我不明白你想要做什么以及你确切的期望是什么。 - Farshad Tahmasbi