Impedir que la imagen de fondo se estire la vista

Siempre que asigno fondo a una vista que se presenta con wrap_content, si la imagen de fondo es mayor que una vista, la vista se estira de modo que pueda contener todo el fondo. ¿Por qué es así y cómo prevenirlo? Se produce incluso si la imagen es de 9 parches y tiene áreas extensibles marcado – ¿por qué no se reduce la imagen al tamaño de la vista?

Puede utilizar RelativeLayout y crear dos elementos dentro de él. ImageView para el fondo y otra vista para su contenido. Utilice el android:layout_alignBottom al ImageView y establezca el valor en el id de su vista de contenido. También establece el scaleType del ImageView en fitXY.

 <RelativeLayout android:id="@+id/relativeLayout1" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_width="fill_parent"> <ImageView android:layout_width="fill_parent" android:layout_height="wrap_content" android:scaleType="fitXY" android:src="@drawable/chronometer_bg" android:id="@+id/imageView_chronometerBackground" android:layout_alignBottom="@id/chronometer" /> <Chronometer android:text="Chronometer" android:id="@+id/chronometer" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:textSize="32sp" android:gravity="center" /> </RelativeLayout> 

O bien sobreescribir los métodos getSuggestedMinimumWidth y getSuggestedMinimumHeight de la vista de diseño o los métodos getMinimumWidth y getMinimumHeight de su fondo dibujable para lograrlo.

Puedes intentar establecer el ancho y la altura a algo como 60dp lugar de wrap_content y usar android:scaleType .

En lugar de utilizar un fondo, puede utilizar FrameLayout con ImageView como primer elemento. A continuación, utilice android: scaleType = "center" para que la imagen no se haga escala. Siempre será su tamaño original, y centrado. A continuación, puede colocar las vistas que desee en la parte superior de la misma en FrameLayout.

Esto podría ser una idea loca, pero ¿qué tal crear una imagen especial de nueve parches como esta:

  • Tomar la imagen original
  • Agregue un borde de 2 píxeles alrededor de él (un borde de píxeles para la marca de 9 parches y un borde vacío de 1 píxel)
  • Marque el borde vacío como estirable

De esta manera usted tendrá 2 áreas estirables horizontalmente, y 2 verticalmente, que es el borde vacío. Así, el centro de la imagen (su imagen original permanece sin escala)

Por cierto, esto podría no ser la mejor solución, pero ya que los otros ya figuran las buenas soluciones, pensé que añadir esta también 😉

¿Por que es esto entonces? Porque estableció el ancho en wrap_content .

Cómo puedes prevenirlo:

a. Establezca el atributo maxWidth .

segundo. Intente colocar el ImageView con wrap_content dentro de un Layout que tenga un ancho fijo.

do. (A menudo uso TableLayout como su shrinkColumns y el atributo stretchColumns son útiles para cosas como esta. Tal vez esto puede trabajar para usted también.)

Para más ayuda, se necesita algo de XML.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.