2011-03-09 9 views
7

tengoandroide gráfico 9-patch no escala en vista de la imagen

<LinearLayout android:id="@+id/LinearLayout01" 
    android:layout_width="wrap_content" android:layout_height="wrap_content" 
    android:orientation="horizontal"> 
    <ImageView android:layout_height="wrap_content" 
     android:layout_width="wrap_content" android:id="@+id/ImageView01" 
     android:src="@drawable/phone80"></ImageView> 
    <ImageView android:id="@+id/ImageView02" 
     android:layout_height="wrap_content" android:src="@drawable/underline" 
     android:layout_width="fill_parent" android:layout_gravity="fill_vertical|fill_horizontal"></ImageView> 
</LinearLayout> 

La primera imagen es una imagen fija de tamaño que no se debe escalar en absoluto. La imagen de la derecha debe escalar horizontalmente al espacio máximo. La fuente apunta a un archivo .9.png válido. Desafortunadamente, siempre solo aparece en su tamaño original. ¿Qué propiedad debo establecer? ¿ImageView es el objeto correcto?

Gracias, A.

Respuesta

22

Uso android:background lugar. Y si solo se trata de un subrayado, puede usar un View y no un ImageView. En cuanto a llenar el resto de la pantalla, es posible que desee utilizar un TableLayout en su lugar.

Además, asegúrese de que su parche 9 sea el correcto. Los lados 1px deben ser negros. # 000

+0

acaba de recibir un downvote ... Me encantaría algunos comentarios que otros puedan beneficiarse. – trgraglia

+0

Agregar una imagen al fondo en lugar de src significa otra capa de contenido que ralentiza el rendimiento. No fue mi voto negativo, pero también quiero poder usar una imagen de relleno y cambiarla por la imagen final cuando se carga; no tiene dos imágenes apiladas – radley

+0

Verdad y no verdad. Puede agregar el fondo al diseño lineal de la raíz y luego puede tener un relleno o formato, lo que significa que los contenidos serán la segunda capa y más fáciles de mantener ... Ambos son geniales, pero depende del caso de uso. ¡Gracias por el comentario! – trgraglia

50

Simplemente agregue android:scaleType="fitXY" a su ImageView. Por ejemplo, para myimage.9.png:

<ImageView 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:src="@drawable/myimage" 
    android:scaleType="fitXY" /> 
+1

esto es correcto. Sin fitXY, el parche 9 no se respetará y la imagen se estirará de forma normal. – user123321

+0

Gracias por esto. =) – DarwinLouis

+0

Definitivamente la respuesta correcta desde android: background no se tiene en cuenta cuando ImageView está dentro de RelativeLayout, y en relación con otras vistas. –

1

También compruebe para asegurarse de que sus líneas de escala en los laterales no se extienden hasta el final a las esquinas de la imagen. Sabía que realmente no tenía sentido que hubiera píxeles negros allí, pero pensé que Android los ignoraría, pero en realidad evita que la escala funcione. También le da el mensaje "ERROR: 9-patch image xxx.9.png malformado" en la ventana de salida, pero es posible que no lo haya notado. Tan pronto como saqué los píxeles en las esquinas, comenzó a funcionar para mí.

0

Trate de usar setImageResource (9patchResourceID) en lugar de setImageBitmap o setImageBackground y funciona :)

Cuestiones relacionadas