Android ImageView: Ajustar el ancho

Descargue la imagen y la fijo como fondo de la pantalla dinámicamente usando Imageview . He intentado ScaleType , para escalar la imagen.

Si la altura de la imagen es mayor que el ancho, entonces ScaleTypes fitStart , fitEnd y fitCenter no funcionan. Android reduce la foto y la ajusta según la altura, pero veo un espacio extra en blanco como parte del ancho.

Quiero reducir la foto basándome en el ancho para que se ajuste a la anchura y no me importa si hay algún espacio extra en blanco como parte de la altura o si la altura es demasiado larga, está bien si va a salir de la vista (Si es posible?).

ScaleType.XY escala la foto y cabe todo en el ImageView y no se preocupa por la altura de la imagen / relación de peso.

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

Terminé usando este código:

 <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" /> 

Asegúrese de establecer la imagen utilizando src lugar de background .

android:adjustViewBounds="true" hace el trabajo!

Esta elegante solución encontrada aquí funcionará como un encanto para usted.

Básicamente sólo tiene que crear una clase pequeña que amplíe ImageView y simplemente anule el método onMeasure para ajustar el ancho y la altura como desee. Aquí se escala para ajustar el ancho utilizando:

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

Usted utilizaría este ImageView especial como esto:

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

Hay un método simple si simplemente desea llenar el ancho de la pantalla y tener la altura proporcional (y saber la proporción de la imagen) que puede hacer esto en 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); 

Donde 0,6 es el ajuste de la relación (también se podría calcular automáticamente, por supuesto, si se conoce el w & h de la imagen).

PD:
Aquí está el lado 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" /> 

Esto funciona para mí.

Crear una clase extends 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); } } } 

En xml utilice lo siguiente en lugar de ImageView

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

Creo que no puedes hacerlo solo con XML, necesitas cambiar el tamaño, el mapa de bits

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

entonces

 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; } 

Y el diseño

  <ImageView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/background" android:layout_width="wrap_content" android:layout_height="wrap_content" /> 
  • Cómo configurar un efecto ripple en textview o imageview en Android?
  • Cómo agregar efectos de imagen en android?
  • ¿Cómo puedo alinear una imagen dentro de un ImageView a la parte inferior del ImageView?
  • Cómo agregar una imagen en la barra de herramientas
  • Cómo comprobar qué recurso de imagen actual se adjunta a ImageView en android xml?
  • Cómo crear el efecto de pulso ImageView con nueve animaciones androides de edad
  • Uso de ImageView como fondo para un diseño de Android
  • Cómo poner un botón entre dos diseños
  • ¿Cómo subir la imagen a Parse en android?
  • Cuando haga clic en un botón, gire la imagen en sentido horario en android
  • Personalizable con ImageView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.