2010-12-02 52 views
52

我有一個ListView的項目有平鋪背景。要做到這一點,我使用以下可繪製的XML:平鋪drawable有時延伸

<bitmap 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:src="@drawable/tile" 
    android:tileMode="repeat" /> 

通常,這個工程。然而,有時候,src drawable不是平鋪的,而是被拉伸以填充整個列表項。 (我有幾個不同的瓷磚,我用它們在一個ListView中混合使用,如果有拉伸而不是平鋪,那麼它就不會一次完成,因爲這是值得的。)

我也試圖將android:dither="true"添加到該XML,因爲我在某處閱讀,沒有它可能有錯誤。這並沒有改變任何事情。

有沒有人有同樣的問題?你怎麼修好它的?

+2

我遇到了同樣的問題。任何決議呢? – danh32 2010-12-21 16:09:05

+0

你可以發佈從適配器的getView開始的視圖彙編代碼嗎?我有一個預感,當使用循環視圖時,tilemode正在重置。 – 2011-02-10 16:46:22

+1

這裏同樣的問題。 Zulaxia以編程方式重新應用tilemode的解決方案有時會解決這個問題,但通常情況下它會反彈。對我來說,它只發生在我在選擇器狀態列表中使用的平鋪畫布層列表中,然後作爲按鈕的背景應用。格雷格的評論認爲,這個問題可能與在再循環視圖中重置的tilemode相關,與我在這裏看到的相當吻合。 – 2011-09-26 09:13:57

回答

2

這聽起來像一個錯誤,雖然我從來沒有見過它自己。如果你有一個簡單的APK重現這個問題,請發送給我(romainguy/at/android.com)或者提交bug here

9

我剛剛有與CLAMP TileMode完全相同的問題。我有一個位圖,然後只是放在底部,並將其設置爲一個XML定義的BitmapDrawable,並且在圖形預覽窗口中看起來都很好,無論我使用ViewImage的大小如何在頂部繪製位圖然後重複最後一個像素填充到最後。

在模擬器和我自己的手機上啓動各種SDK版本的應用程序,然後產生一個完全無用的直接「填充」類型的失真。

該解決方案被證明僅僅是每一個我在我的代碼中改變了ImageView的大小後重新申請的TILEMODE:

((BitmapDrawable)ascender.getDrawable()).setTileModeY(TileMode.CLAMP); 

現在,這一切都畫罰款。所以是的,這看起來像是一個bug。

37

我也被這個問題困住了。很難診斷,甚至很難找到類似的報告和可用的解決方案。在freenode的#Android的開發IRC頻道

「小吃」附帶以下實用方法:

public static void fixBackgroundRepeat(View view) { 
    Drawable bg = view.getBackground(); 
    if (bg != null) { 
     if (bg instanceof BitmapDrawable) { 
      BitmapDrawable bmp = (BitmapDrawable) bg; 
      bmp.mutate(); // make sure that we aren't sharing state anymore 
      bmp.setTileModeXY(TileMode.REPEAT, TileMode.REPEAT); 
     } 
    } 
} 

它應用到具有平鋪背景集合中的所有視圖(例如findViewById他們)。

另外,我有這個bug開始設置後演戲的感覺「anyDensity =真」在AndroidManifest.xml

1

This blog進入討論這個問題

this solution由伊沃·範德Wijk上市小吃合併, 這個對我有用。

關鍵是要刪除從XML的平鋪設置,然後將其設置爲在運行時平鋪。如果它們都設置爲平鋪,它對我不起作用。

編輯:其實,我撒謊。即使這樣,它似乎有時也無法平鋪。

如果有可靠的解決方法,這將是非常好的。編輯2:將其設置爲其他內容(例如.CLAMPED),然後將其設置回目前似乎正在工作。

6

網上有很多關於這個話題的噪音,有各種(和許多)建議的解決方案。

  • 如果你仍然在虧損,我的建議是保留所有鋪位圖 資源方,基本2個維度

ie:16px x 16px xhdpi tile資產。

我希望如果位圖沒有完美鑲嵌,我希望Android平臺能「覆蓋」填充空間,然後修剪浪費。然而,跨越mdpi,hdpi和xhdpi(以及v2.3到v4.0)「不一致」的10px * 10px平鋪位圖顯示了這種擴展。

基準2維度允許您在完成各種分辨率的同時進行整體甚至分割,並且每次設備在每次創建視圖時都會嘗試繪製切片。

在Android開發中,我們會與測距硬件和供應商蘸手指進入平臺進行競爭 - 有時這種微不足道的黑魔法正好適用。

這似乎至少解決了我的問題。值得一試。

0

我將圖像從drawable-xhdpi移動到drawable文件夾,一切都很好。

0

我也有同樣的問題。我所缺少的是我們需要在imageview中添加scaletype以適合xml,以便xml位圖正常工作。

tile_bitmap.xml

<bitmap 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:src="@drawable/tile" 
    android:tileMode="repeat" /> 

layout.xml

<ImageView 
    android:layout_width="match_parent" 
    android:src="@drawable/tile_bitmap" 
    android:layout_height="match_parent" 
    android:scaleType="fitXY"/>