XML drawable Bitmap tileMode bug?

时间:2011-09-28 16:09:17

标签: android android-layout

我遇到的问题是我的drawable资源使用了tileMode repeat。在某些情况下,图像只是拉伸,有时会被正确重复。

以下是我用来创建按钮状态的xml文件:

用于重复拼贴的图片可绘制

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>

请参阅下面的图片,我正在谈论的是什么。

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

2 个答案:

答案 0 :(得分:22)

这是一个已知错误,在Android 3.0中已部分修复,并在ICS中完全修复。

答案 1 :(得分:2)

我们在索尼的Google TV设备上写了类似的3.2问题。我们注意到在位图上使用android:tileMode="repeat"作为背景图像时出现了一些非常相似的背景条纹。

在这种情况下,修复是关闭包含位图的视图上的硬件加速(如我们的Activity中的函数):

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