Android ImageView:适合宽度

我下载图像,并使用Imageviewdynamic设置为屏幕背景。 我已经尝试过ScaleType来缩放图像。

如果图像高度大于宽度,则ScaleTypes fitStartfitEndfitCenter不起作用。 Android缩小照片并根据高度进行调整,但是我看到一些额外的空白部分作为宽度的一部分。

我想根据宽度缩小照片,使其适合宽度,我不在乎是否有一些额外的空白作为高度的一部分,或者如果高度太长,如果它离开视图是好的(如果这是可能的?)。

ScaleType.XY缩放照片并将所有内容放在ImageView ,而不关心图像的高度/重量比。

 <ImageView android:id="@+id/background" android:layout_width="match_parent" android:layout_height="match_parent" android:adjustViewBounds="true" android:scaleType="fitStart" /> 

我结束了使用这个代码:

 <ImageView android:id="@+id/background" android:layout_width="match_parent" android:layout_height="match_parent" android:adjustViewBounds="true" android:scaleType="centerCrop" android:src="@drawable/name" /> 

确保你使用src而不是background来设置图像。

android:adjustViewBounds="true"做这个工作!

这个在这里find的优雅的解决scheme将像你的魅力工作。

基本上你只需要创build一个扩展ImageView小类,并简单地覆盖onMeasure方法来根据需要调整宽度和高度。 这里它通过使用以下来缩放以适应宽度:

 @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int width = MeasureSpec.getSize(widthMeasureSpec); int height = width * getDrawable().getIntrinsicHeight() / getDrawable().getIntrinsicWidth(); setMeasuredDimension(width, height); } 

你可以像这样使用这个特殊的ImageView

 <your.activity.package.AspectRatioImageView android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="center_vertical" android:src="@drawable/test" /> 

有一个简单的方法,如果你只是想填补屏幕的宽度,并有高度成比例(知道图像的比例),你可以在OnCreate()中做到这一点:

 setContentView(R.layout.truppview_activity); trupImage = (ImageView) findViewById(R.id.trupImage); Display display = getWindowManager().getDefaultDisplay(); DisplayMetrics outMetrics = new DisplayMetrics(); display.getMetrics(outMetrics); float scWidth = outMetrics.widthPixels; trupImage.getLayoutParams().width = (int) scWidth; trupImage.getLayoutParams().height = (int) (scWidth * 0.6f); 

0.6是比例调整(当然,如果你知道图像的话,你也可以自动计算)。

PS:
这里是XML方面:

  <ImageView android:id="@+id/trupImage" android:layout_width="match_parent" android:background="@color/orange" android:layout_height="match_parent" android:adjustViewBounds="true" android:scaleType="fitCenter" /> 

这对我有用。

创build一个类扩展ImageView

  package com.yourdomain.utils; import android.content.Context; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.widget.ImageView; public class ResizableImageView extends ImageView { public ResizableImageView(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { Drawable d = getDrawable(); if (d != null) { int width = MeasureSpec.getSize(widthMeasureSpec); int height = (int) Math.ceil((float) width * (float) d.getIntrinsicHeight() / (float) d.getIntrinsicWidth()); setMeasuredDimension(width, height); } else { super.onMeasure(widthMeasureSpec, heightMeasureSpec); } } } 

在xml中使用以下代替ImageView

  <com.yourdomain.utils.ResizableImageView android:layout_width="match_parent" android:layout_height="wrap_content" android:src="@drawable/test" /> 

我认为你不能只用XML,你需要调整自己,位图

 Display display = getWindowManager().getDefaultDisplay(); int width = display.getWidth(); try { ((ImageView) findViewById(R.id.background)) .setImageBitmap(ShrinkBitmap(width)); } catch (FileNotFoundException e) { e.printStackTrace(); } 

然后

 private Bitmap ShrinkBitmap(int width) throws FileNotFoundException { BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options(); bmpFactoryOptions.inJustDecodeBounds = true; Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.img, bmpFactoryOptions); int widthRatio = (int) android.util.FloatMath .ceil(bmpFactoryOptions.outWidth / (float) width); bmpFactoryOptions.inSampleSize = widthRatio; if (bmpFactoryOptions.inSampleSize <= 0) bmpFactoryOptions.inSampleSize = 0; bmpFactoryOptions.inPreferredConfig = Bitmap.Config.ARGB_8888; bmpFactoryOptions.inJustDecodeBounds = false; bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.img, bmpFactoryOptions); return bitmap; } 

和布局

  <ImageView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/background" android:layout_width="wrap_content" android:layout_height="wrap_content" />