Ошибка в отрисовке XML растрового изображения.

У меня возникли проблемы, когда мой нарисованный ресурс использует повторение tileMode. В некоторых случаях изображение просто растягивается, а иногда оно правильно повторяется.

Ниже приведены XML-файлы, которые я использую для создания состояний кнопок:

Повторяемое изображение используется для плитки повторяется

Повторяемое изображение используется для плитки повторяется

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

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>

Пожалуйста, посмотрите на изображения ниже, о чем именно я говорю.

Нормальное состояние изображения правильно повторяетсяИзображение в сжатом состоянии не повторяется, а растягивается

2 ответа

Решение

Это известная ошибка, частично исправленная в Android 3.0 и полностью исправленная в ICS.

У нас была похожая проблема при записи 3.2 на устройстве Sony TV Google. Мы заметили некоторые очень похожие полосы фона, вытекающие из использования android:tileMode="repeat" на растровом изображении в качестве фонового изображения.

В этом случае исправление должно было отключить аппаратное ускорение для представления, которое содержало растровое изображение следующим образом (из функции в нашей Деятельности):

View tile_holder = this.findViewById(R.id.tile_holder);
tile_holder.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
Другие вопросы по тегам