2011-09-28 27 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