如何在保持纵横比的屏幕上拉伸三个图像?
我需要在屏幕上并排显示三张相同尺寸的图像(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它。
我不知道XML布局和Android API,但math很简单, find屏幕的宽度并除以三。 这是每个图像的宽度。 现在将宽度乘以高度与宽度的原始图像比率。 这是每个图像的高度。
int imageWidth = screenWidth / 3; float ratio = originalImage.Height / (float)originalImage.Width; int imageHeight = (int)(imageWidth * ratio);