android - vectoriales - ¿Error de mapa de bits de azulejo de XML dibujable?
que es una imagen vectorizada (2)
Este es un error conocido, parcialmente arreglado en Android 3.0 y completamente arreglado en ICS.
Tengo problemas donde mi recurso dibujable usa la repetición tileMode. En algunos casos, la imagen se acaba de estirar y, a veces, se repite correctamente.
Los siguientes son los archivos xml que utilizo para crear los estados de los botones:
Imagen dibujable utilizada para azulejos repetidos.
^^^^^^^^^^^^^^
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 lo que estoy hablando exactamente.
Tuvimos un problema similar al escribir 3.2 en el dispositivo Google TV de Sony. Nos dimos cuenta de que algunas bandas de fondo muy similares se derivan del uso de android:tileMode="repeat"
en un mapa de bits como imagen de fondo.
En este caso, la solución fue desactivar la aceleración de hardware en la vista que contenía el mapa de bits así (desde una función en nuestra Actividad):
View tile_holder = this.findViewById(R.id.tile_holder);
tile_holder.setLayerType(View.LAYER_TYPE_SOFTWARE, null);