如何在保持纵横比的屏幕上拉伸三个图像?

我需要在屏幕上并排显示三张相同尺寸的图像(200×100)(无间隙)。 它们应占据屏幕的整个宽度并保持宽高比。 是否有可能完成只使用布局XML文件,或者我需要使用Java代码?
解决scheme应该解决独立…任何人都可以发布解决scheme或链接这个(或类似)的问题? 谢谢!

得到它的工作! 但正如我上面所说,你需要创build自己的class级。 但是它非常小。 我在这篇文章中借助Bob Lee的回答创build了它: Android:如何在保持宽高比的同时将图像拉伸到屏幕宽度?

package com.yourpackage.widgets; import android.content.Context; import android.util.AttributeSet; import android.widget.ImageView; public class AspectRatioImageView extends ImageView { public AspectRatioImageView(Context context) { super(context); } public AspectRatioImageView(Context context, AttributeSet attrs) { super(context, attrs); } public AspectRatioImageView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int width = MeasureSpec.getSize(widthMeasureSpec); int height = width * getDrawable().getIntrinsicHeight() / getDrawable().getIntrinsicWidth(); setMeasuredDimension(width, height); } } 

现在在XML中使用它:

 <com.yourpackage.widgets.AspectRatioImageView android:id="@+id/image" android:src="@drawable/yourdrawable" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:adjustViewBounds="true" /> 

玩的开心!

=====================================

通过使用android:adjustViewBounds =“true”,find了另一种只在XML中执行相同操作的方法。 这里是一个例子:

 <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <ImageView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:adjustViewBounds="true" android:src="@drawable/image1" /> <ImageView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:adjustViewBounds="true" android:src="@drawable/image2" /> <ImageView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:adjustViewBounds="true" android:src="@drawable/image2" /> </LinearLayout> 

只考虑可能会出错的一个小的升级:null可绘制或0宽度。

 package com.yourpackage.yourapp; import android.content.Context; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.widget.ImageView; public class AspectRatioImageView extends ImageView { public AspectRatioImageView(Context context) { super(context); } public AspectRatioImageView(Context context, AttributeSet attrs) { super(context, attrs); } public AspectRatioImageView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { Drawable drawable = getDrawable(); if (drawable != null) { int width = MeasureSpec.getSize(widthMeasureSpec); int diw = drawable.getIntrinsicWidth(); if (diw > 0) { int height = width * drawable.getIntrinsicHeight() / diw; setMeasuredDimension(width, height); } else super.onMeasure(widthMeasureSpec, heightMeasureSpec); } else super.onMeasure(widthMeasureSpec, heightMeasureSpec); } } 

Jake Wharton改进了AspectRatioImageView类,可以通过xml设置dominantMeasurement和aspectRatio。 你可以在下面的链接find它。

https://gist.github.com/JakeWharton/2856179

我不知道XML布局和Android API,但math很简单, find屏幕的宽度并除以三。 这是每个图像的宽度。 现在将宽度乘以高度与宽度的原始图像比率。 这是每个图像的高度。

 int imageWidth = screenWidth / 3; float ratio = originalImage.Height / (float)originalImage.Width; int imageHeight = (int)(imageWidth * ratio);