tamaño studio programacion pantalla móviles imagen desarrollo curso aplicaciones aplicacion ajustar android layout formatting imageview custom-view

studio - manual de programacion android pdf



El tamaño de Android ImageView no escala con la imagen de origen (3)

¿Qué tal cambiar tus ImageViews para usar android:layout_height="fill_parent" ?

Editar : me tomó un tiempo encontrarlo, pero al mirar la fuente me ayudó a identificar adjustViewBounds . Es posible que desee intentar agregar android:adjustViewBounds="true" a sus ImageViews. Sorprendentemente, esto se convierte en falso.

Tengo algunas ImageViews dentro de LinearLayout. Necesito reducir el tamaño de las ImageViews para que mantengan sus relaciones de aspecto mientras encajan verticalmente dentro de LinearLayout. Horizontalmente, solo necesito que estén adyacentes el uno al otro.

He hecho un banco de pruebas simplificado para esto que jerarquiza Layouts ponderados para que tenga un LinearLayout ancho, pero no muy alto para los ImageViews -

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="5"> <LinearLayout android:id="@+id/linearLayout3" android:layout_height="fill_parent" android:layout_width="fill_parent" android:layout_weight="1"> <ImageView android:id="@+id/imageView1" android:layout_height="wrap_content" android:layout_width="wrap_content" android:src="@drawable/test_image" android:scaleType="fitStart"></ImageView> <ImageView android:id="@+id/imageView2" android:layout_height="wrap_content" android:layout_width="wrap_content" android:src="@drawable/test_image" android:scaleType="fitStart"></ImageView> </LinearLayout> <LinearLayout android:id="@+id/linearLayout4" android:layout_height="fill_parent" android:layout_width="fill_parent" android:layout_weight="1"></LinearLayout> </LinearLayout> <LinearLayout android:id="@+id/linearLayout2" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1"></LinearLayout> </LinearLayout>

(En el editor de diseño de Eclipse, las imágenes se recortan verticalmente y no a escala, pero esa es solo una de esas idiosincrasias que aprendemos a amar)

Cuando se ejecutan en hardware, las imágenes se ajustan a la altura correcta conservando su relación de aspecto. Mi problema es que no están uno al lado del otro. La altura de cada ImageView coincide correctamente con la altura de LinearLayout. El ancho de cada ImageView es el ancho de la imagen sin escala, es decir, las imágenes a escala reales que aparecen en el lado izquierdo de sus ImageViews. Debido a esto, estoy obteniendo un gran espacio entre las imágenes.

Idealmente, me gustaría gestionar esto a través de XML, si esto no es posible, entiendo que usar una vista personalizada puede ser la mejor solución.

Traté de crear una clase IconView (extiende ImageView) que anula onMeasure para que pueda crear vistas de imágenes del tamaño necesario al ampliar el ancho según la altura. Pero parentWidth y parentHeight que pasaron a la función fueron las dimensiones de la pantalla y no del contenedor LinearLayout.

@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int parentWidth = MeasureSpec.getSize(widthMeasureSpec); int parentHeight = MeasureSpec.getSize(heightMeasureSpec); // Calculations followed by calls to setMeasuredDimension, setLayoutParams super.onMeasure(widthMeasureSpec, heightMeasureSpec); }

Entonces mis preguntas son -

1) ¿Puedo modificar el XML de alguna manera para que haga lo que necesito?

2) ¿Cómo puedo hacer que mi clase personalizada obtenga el alto de LinearLayout para que pueda calcular el ancho necesario para las imágenes personalizadas?

Gracias si has logrado leer hasta aquí. ¡Aún más gracias si puedes dirigirme en la dirección de una solución!


Extrañamente android:layout_height="fill_parent" y android:adjustViewBounds="true" no ayudó. El problema que tenía era que la imagen se mostraba, pero con la fila de bloque en la parte superior y la negra en la parte inferior de la imagen. Configurar el tipo de escala a "centerCrop" me ayudó. Supongo que la razón por la que mi tamaño de imagen era pequeño.


Tuve un problema similar y mi solución fue establecer el android:scaleType="fitEnd" de ImageView en el archivo de diseño XML.