Cómo escalar una imagen en ImageView para mantener la relación de aspecto
En Android, definí un ImageView
's layout_width
to be fill_parent
(que ocupa todo el ancho del teléfono).
Si la imagen que le pongo ImageView
es más grande que layout_width
, Android la escalará, ¿verdad? Pero ¿qué pasa con la altura? Cuando Android escale la imagen, ¿mantendrá la relación de aspecto?
Lo que descubrí es que hay un espacio en blanco en la parte superior e inferior ImageView
cuando Android escala una imagen que es más grande que el archivo ImageView
. ¿Es eso cierto? En caso afirmativo, ¿cómo puedo eliminar ese espacio en blanco?
Sí, de forma predeterminada, Android reducirá la escala de su imagen para que se ajuste a ImageView, manteniendo la relación de aspecto. Sin embargo, asegúrese de configurar la imagen en ImageView usando
android:src="..."
en lugar deandroid:background="..."
.src=
hace que escale la imagen manteniendo la relación de aspecto, perobackground=
hace que escale y distorsione la imagen para que se ajuste exactamente al tamaño de ImageView. (Sin embargo, puedes usar un fondo y una fuente al mismo tiempo, lo que puede ser útil para cosas como mostrar un marco alrededor de la imagen principal, usando solo un ImageView).También debería intentar
android:adjustViewBounds
hacer que ImageView cambie de tamaño para adaptarse a la imagen reescalada. Por ejemplo, si tiene una imagen rectangular en lo que normalmente sería un ImageView cuadrado, ajustarViewBounds=true hará que cambie el tamaño del ImageView para que también sea rectangular. Esto luego afecta la forma en que se distribuyen otras vistas alrededor de ImageView.Luego, como escribió Samuh, puede cambiar la forma predeterminada en que escala las imágenes usando el
android:scaleType
parámetro. Por cierto, ¡la forma más fácil de descubrir cómo funciona esto hubiera sido simplemente experimentar un poco tú mismo! Sólo recuerde mirar los diseños en el propio emulador (o en un teléfono real), ya que la vista previa en Eclipse suele ser incorrecta.
Ver android:adjustViewBounds
.
Establezca esto en verdadero si desea que ImageView ajuste sus límites para preservar la relación de aspecto de su elemento de diseño.