Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

XML drawable Bitmap tileMode bug?

I'm having issues where my drawable resource uses the tileMode repeat. In some cases the image is just stretched and sometimes it is properly repeated.

The following are the xml files I use to create the button states:

Image drawable used for tile repeated

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>

Please see the images below of what exactly I'm talking about.

Normal state image properly repeatedPressed state image not repeated but stretched

like image 242
Jona Avatar asked Sep 28 '11 16:09

Jona


2 Answers

This is a known bug, partially fixed in Android 3.0 and completely fixed in ICS.

like image 98
Romain Guy Avatar answered Nov 17 '22 08:11

Romain Guy


We were having a similar problem writing for 3.2 on Sony's Google TV device. We noticed some very similar background-striping stemming from using android:tileMode="repeat" on a bitmap as a background image.

In this case, the fix was to turn off hardware acceleration on the view that contained the bitmap like so (from a function in our Activity):

View tile_holder = this.findViewById(R.id.tile_holder);
tile_holder.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
like image 21
Steve Avatar answered Nov 17 '22 08:11

Steve