2010-03-09 16 views
9

¿Cómo puedo evitar que mi mapa de bits se escale automáticamente en un ImageView o ImageButton si la vista o el botón se alargan usando "fill_parent" o usando "weight"?Android: ¿Cómo evitar que la imagen se escale en ImageView o ImageButton?

Esto será útil, por ejemplo, para crear una barra de herramientas de 4 botones en la parte superior de la pantalla donde los botones están igualmente espaciados, pero las imágenes dentro de los botones se siguen estirando incluso si uso scaleType = "center" , que debería evitar escalar de acuerdo con el documento, pero no es así.

¡Se agradece cualquier idea!

Gracias,

Respuesta

10

He encontrado que al usar Android: el fondo escala automáticamente la imagen que está utilizando allí al tamaño de la Vista.

He intentado usar el android: src para poner la imagen en la vista. La imagen no se amplió, pero no pude hacer que la imagen se centrara en relación con el tamaño de la Vista.

así que he intentado hacer todo el botón de su propia disposición relativa y esto es lo que he utilizado:

<RelativeLayout android:id="@+id/RelativeLayout01" 
       android:layout_height="fill_parent" 
       android:layout_width="fill_parent"> 
       <ImageButton android:id="@+id/ImageButton01"  
          android:layout_height="fill_parent" 
          android:layout_width="fill_parent"></ImageButton> 
       <ImageView android:id="@+id/ImageView01" 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:background="@drawable/cardback1" 
          android:layout_centerInParent="true"></ImageView> 
</RelativeLayout> 

El ImageButton está en el fondo y siempre será el mismo tamaño que la disposición. Sin embargo, el ImageView siempre permanecerá centrado en RelativeLayout y no se escalará. De esta forma, RelativeLayout puede crecer y moverse y la imagen en la parte superior del botón permanecerá siempre del mismo tamaño, pero el botón crecerá. Sin embargo, la imagen se reducirá si el diseño se vuelve más pequeño que la imagen misma.

Creo que eso es lo que estabas buscando. Puede haber una forma mejor de hacer esto, pero esto es todo lo que puedo pensar ahora.

+17

No hay necesidad de hacer esto, simplemente no use Android: fondo. Use android: src en su lugar (ImageView), o android: drawableLeft/Right/Bottom/Top (botón o ImageView), o android: botón (ImageButton). –

+0

@Romain: ¿No podemos usar un fondo dibujable de 9 parches como botón en el cual marcamos la parte del icono de nuestro botón como no estirable y todo el espacio extra alrededor (el relleno alrededor del icono) como estirable? ¿De modo que cuando se vuelve a clasificar según el tamaño del fondo solamente se estira la porción adicional? – Samuh

+1

Gracias Matt y Romain, el android: src era exactamente lo que estaba buscando.Eso hizo el truco :-) – user277827

2

Si se escala la imagen, asegúrese de que no está ejecutando la aplicación en modo de compatibilidad (por ejemplo, si orienta Android 1.5/1.6 sin el apoyo de múltiples densidades y ejecutar la aplicación en Android 2.0.)

3

Simplemente modifique su dibujable, aplique un fondo transparente más grande. Digamos que mi dibujo en hdpi es de 41 * 48 px icon.png. Creé una nueva imagen de 60 * 60 px con un fondo transparente, copie y pegue el ícono anterior.png y guárdelo con el mismo nombre. De esta manera, no necesita tocar sus diseños.

A continuación, se puede comprobar la zona del botón más grande si se aplica un poco transparenteandroide : Fondo:

<ImageButton android:id="@+id/widget_open" 
android:src="@drawable/icon_widget_arrow_up" 
android:background="#ff777777" 
android:layout_height="wrap_content" 
android:layout_width="wrap_content"></ImageButton> 

Aplicar el dibujable anterior y nuevo en android: src, debería ver claramente Área de ImageButton.

Por cierto, estoy ejecutando la aplicación en modo de compatibilidad.

+0

sobregiro no deseado.No se recomienda su uso – Asthme

Cuestiones relacionadas