ImageView en ListView que amplía el ancho máximo

Tengo un ListView cuyos elementos son ImageView s, por el bien de la discusión. Quiero que la imagen a escala a la anchura de las filas de ListView , y mantener su relación de aspecto. Aquí está una versión simplificada de la disposición del artículo de ListView ,

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:padding="4dp" > <FrameLayout android:id="@+id/page_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:visibility="visible" > <ImageView android:id="@+id/image" android:layout_width="match_parent" android:layout_height="wrap_content" android:adjustViewBounds="true" android:scaleType="fitCenter" android:src="@drawable/some_image" /> </FrameLayout> </FrameLayout> </LinearLayout> 

El ancho de ImageView es match_parent , y todos sus ancestros son iguales. El diseñador de diseño muestra que las dimensiones de ImageView abarcan todo el ancho, pero la imagen no lo hace.

EDIT: la imagen está escalando correctamente. El problema es que la altura de la fila de vista de lista es tal que el ancho no puede escalar al tamaño correcto. Si uso fitXY , escala el ancho, pero entonces la relación de aspecto es incorrecta.

¿algunas ideas? Gracias.

Respondiendo mi propia pregunta

No pude encontrar ninguna forma de lograr esto sin crear una vista personalizada. En pocas palabras, la vista personalizada establece sus propias dimensiones a las dimensiones reales (no escaladas) del dibujable detrás de él.

 public class ResizableImageView extends ImageView { public static interface OnSizeChangedListener { void onSizeChanged(int width, int height); } private OnSizeChangedListener onSizeChangedListener = null; public ResizableImageView(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int width = MeasureSpec.getSize(widthMeasureSpec); int height = width * getDrawable().getIntrinsicHeight() / getDrawable().getIntrinsicWidth(); setMeasuredDimension(width, height); if (onSizeChangedListener != null) { onSizeChangedListener.onSizeChanged(width, height); } } public void setOnSizeChangedListener(OnSizeChangedListener listener) { this.onSizeChangedListener = listener; } } 

En mi caso, necesitaba obtener el valor redimensionado con el fin de tamaño de las otras vistas, de ahí la interfaz de escucha.

Si lo que quieres es mantener la relación de aspecto, de acuerdo con la Guía de Android API , creo que tienes que cambiar android: scaleType = "fitCenter" para android: scaleType = "centerInside" o tal vez android: scaleType = "centerCrop" como FitCenter no mantiene la relación de aspecto de la imagen.

  • Imagen borrosa en otro dispositivo
  • Cómo voltear ImageView en Android?
  • Cómo cambiar el origen de ImageView en android
  • Rotar una imagen con animación
  • Desvanecer el borde de la imagen en una vista de imagen
  • Android - picasso muestra solo marcador de posición, no la imagen de URL
  • Eliminar los espacios unnessecary en ListView de imágenes
  • Zoom y arrastrar una imagen en android
  • Mostrar imagenVer superior de RelativeLayout
  • Android - Vista de imagen en el centro en toda la resolución de la pantalla
  • Crear animación cambiando la imagen en ImageView con Timer (o Handler)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.