2011-06-01 16 views
14

Necesito algo así como <img width="100%" /> para Android <ImageView>. Me refiero a cambiar el ancho del ancho de todo el espacio disponible (reducir o ampliar el ancho de la imagen) y cambiar automáticamente la altura para mantener la relación de aspecto.ImageView una dimensión para caber en el espacio libre y segundo evaluar para mantener la relación de aspecto

Something like <ImageView android:layout_width="match_parent" android:layout_height="auto">

Uso android:scaleType="fitCenter" ver con la imagen de lo que quiero, pero sólo con la imagen, no cambia la altura de la vista en sí. Cuando establezco las dimensiones del stand para match_parent obtendré lo que quiero, pero solo si tengo una sola imagen en la pantalla. Pero necesito algunos textos debajo de la imagen.

¿Es la única manera de crear hijo de ImageView? Por ejemplo android:adjustViewBounds="true" no hace nada por mí.

Respuesta

18

Encontré dónde está el problema. La implementación predeterminada de ImageView no puede agrandar la imagen. Si la imagen es más grande que el ancho de la pantalla android: adjustViewBounds = "true" funciona correctamente y ajusta la altura para mantener la relación de aspecto de la imagen. Pero si la imagen es más pequeña que el ancho de la pantalla, no la escala.

esto es motivo por este código

if (newHeight <= heightSize) { 
    heightSize = newHeight; 
} 

en clase ImageView (en la línea 688, API 10)

hice niño especial de ImageView que permiten ampliar la imagen para adaptarse a la anchura.

aquí es: https://gist.github.com/tprochazka/5486822

+0

estoy usando su código, en una vista de lista, con cargador universal de la imagen, y me di cuenta, que con grandes imágenes, que se ahogue la interfaz de usuario mucho. ¿Alguna idea de cómo hacerlo más eficiente? – Tamas

+0

Mi modificación es para que las imágenes pequeñas se ajusten al área más grande de IamgeView, por ejemplo, si el usuario ejecuta la aplicación en una tableta o un dispositivo nuevo con una densidad de pantalla más alta. Si desea utilizar imágenes grandes en ListView, debe reducirlas para que quepan exactamente con el tamaño de ImageView y almacenar en caché este tamaño en la memoria caché de disco LRU. – ATom

Cuestiones relacionadas