2011-09-28 24 views
17

Tengo problemas donde mi recurso dibuja utiliza la repetición tileMode. En algunos casos, la imagen se estira y, a veces, se repite correctamente.XML drawable Bitmap tileMode error?

Los siguientes son los archivos XML que utilizo para crear estados de botón: dibujable

imagen que se utiliza para el azulejo repetida

Image drawable used for tile repeated

^^^^^^^^^ ^^^^

btn_menu_item.xml

<selector 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:constantSize="true" android:visible="true" android:variablePadding="true"> 
    <!-- selected --> 
    <item 
     android:state_selected="true" 
     android:drawable="@drawable/menu_item_selected"/> 

    <!-- focused --> 
    <item 
     android:state_focused="true" 
     android:drawable="@drawable/menu_item_pressed"/> 

    <!-- pressed --> 
    <item 
     android:state_pressed="true" 
     android:drawable="@drawable/menu_item_pressed"/> 

    <!-- normal --> 
    <item 
     android:state_pressed="false" 
     android:state_focused="false" 
     android:drawable="@drawable/menu_item_normal"/> 

</selector> 

menu_item_normal.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:state_selected="true"> 
     <shape android:shape="rectangle"> 
      <gradient 
       android:startColor="#757575" 
       android:endColor="#929292" 
       android:angle="90"/> 
     </shape>  
    </item> 

    <item> 
     <bitmap 
      android:src="@drawable/menu_lines_texture" 
      android:tileMode="repeat" 
      android:dither="true"/> 
    </item> 
</layer-list> 

menu_item_pressed.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:state_selected="true"> 
     <shape android:shape="rectangle"> 
      <gradient 
       android:startColor="#dd4e00" 
       android:endColor="#c64600" 
       android:angle="90"/> 
     </shape> 
    </item> 

    <item> 
     <bitmap 
      android:src="@drawable/menu_lines_texture" 
      android:tileMode="repeat" 
      android:dither="true"/> 
    </item> 
</layer-list> 

Por favor, vea las imágenes a continuación de qué es exactamente lo que estoy hablando.

Normal state image properly repeated Pressed state image not repeated but stretched

Respuesta

22

Este es un error conocido, parcialmente fijo en Android 3.0 y completamente fijo en el ICS.

+0

Gracias por su respuesta sobre este! ¿Hay una solución para esto? – Jona

+8

Establezca el modo mosaico de código en su lugar. –

+0

Todavía encuentro este problema en 3.2 en el Xoom. Configurarlo en código lo corrige. –

2

Estábamos teniendo un problema similar al escribir para 3.2 en el dispositivo Google TV de Sony. Notamos algunas líneas de fondo muy similares derivadas del uso de android:tileMode="repeat" en un mapa de bits como imagen de fondo.

En este caso, la solución consistía en desactivar la aceleración de hardware en la opinión de que contenía el mapa de bits como tal (de una función en nuestra actividad):

View tile_holder = this.findViewById(R.id.tile_holder); 
tile_holder.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 
+0

Puedo responder por esto. Todavía existe un problema en los teléfonos más antiguos que ejecutan Lollipop, configurar el modo de mosaico programáticamente no funcionó, pero sí (a través del archivo de diseño que lo contiene). – batterj2

Cuestiones relacionadas