2011-09-28 29 views
17

我遇到问题,我的drawable资源使用tileMode重复。在某些情况下,图像只是被拉伸,有时会被正确重复。XML可绘制位图tileMode错误?

以下是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

回答

22

这是一个已知的错误,部分固定在Android 3.0的和完全固定在ICS。

+0

感谢您对此的回复!有没有解决方法? – Jona

+8

改为从代码中设置平铺模式。 –

+0

我仍然在Xoom上的3.2中发现这个问题。在代码中设置它可以修复它。 –

2

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

在这种情况下,修复了(在我们的活动从函数)来关闭硬件加速上包含像这样的位图的观点:

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

我可以为此担保。在运行Lollipop的旧手机上问题仍然存在,以编程方式设置平铺模式不起作用,但是这样做(通过包含布局文件)。 – batterj2