setscaletype - set image view android
Fondo de cosecha de Android (4)
Parece que tal cosa solo se puede lograr utilizando ImageView
y estableciendo el parámetro scaleType
consecuencia. Una solución rápida consiste en utilizar FrameLayout
y colocar ImageView
en otro diseño con fondo transparente.
Código:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:src="@drawable/background" />
</FrameLayout>
Tengo un LinearLayout
con ancho establecido en fill_parent
y height en wrap_content
. Ahora quiero darle un fondo de un archivo png, pero hacerlo de forma tradicional hace que LinearLayout
de tamaño para mostrar todo el fondo en lugar de recortar la parte adicional.
¿Cómo puedo configurar el fondo de LinearLayout
para que no LinearLayout
tamaño?
Gracias
El comportamiento predeterminado de los mapas de bits de fondo es llenar el contenedor por completo y aumentar el tamaño horizontal y vertical del contenedor si es necesario. La solución es crear un recurso de mapa de bits dibujable y cambiar la gravedad.
Verifique el siguiente enlace y busque los posibles valores de gravedad. Su vista debería hacer referencia al recurso dibujable y debería estar bien.
http://developer.android.com/guide/topics/resources/drawable-resource.html#Bitmap
pon este código en la actividad xml, por ejemplo activity_main.xml
<ImageView
android:id="@+id/imageView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:src="@drawable/image" />
Lo resolví subclasificando LinearLayout
y anulando la devolución de llamada onMeasure(int,int)
y luego actualizando el diseño XML para usar mi nuevo tipo de diseño. No estoy en libertad de publicar ese código exacto, pero lo que hice fue invocar la super.onMeasure(int,int)
y comprobar si la altura medida volvió a ser la altura exacta de mi imagen de fondo. Si es así, tomo la altura medida de todas las vistas secundarias, luego calculo un nuevo valor de altura y lo paso a setMeasuredDimension(int,int)
.