2017-05-07 49 views
0

我叫background.xml休耕繪製繪製消失機器人 - 在不正確的分辨率

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item> 
    <shape> 
     <gradient 
      android:angle="90" 
      android:startColor="@color/gradient_bottom" 
      android:endColor="@color/gradient_top" 
      android:type="linear" /> 
    </shape> 
</item> 
</selector> 

當XML是繪製文件夾下,在某些情況下,可重複的(不知道爲什麼,可能有東西高內存消耗)背景消失。

然而,當我重新創建的場景,我把同一個XML中的所有繪製高分辨率的文件夾,背景不消失(即繪製,華電國際,繪製-xhdpi等)

這種事情不應該發生, 有人可以解釋爲什麼會發生,以及如何更優雅地解決它?

PS -

  1. 當我把純色作爲背景這一問題不會發生

  2. 的問題也發生了自定義按鈕的背景,當我把固定可繪製分辨率文件夾中的自定義背景

回答

1

我建議儘可能使用具有dpi限定符的資源目錄。否則,您可能會在某些設備上出現OutOfMemory錯誤。說明這裏:

默認情況下,Android的擴展您的位圖資源文件(.png,.jpg和.gif文件)和九宮繪項目(.9.png文件),以便使他們在適當的物理尺寸在每個設備上。例如,如果您的應用程序僅爲基準中間屏幕密度(mdpi)提供位圖可繪製,則系統在高密度屏幕上縮放它們,並在低密度屏幕上縮小它們。這種縮放會導致位圖中的僞像。爲確保您的位圖看起來最好,您應該爲不同的屏幕密度提供不同分辨率的替代版本。


在運行時,系統確保了對於任何給定資源的以下過程在當前屏幕上的最佳可能的顯示:

該系統使用基於相應的替代資源 當前屏幕的大小和密度,系統使用應用程序中提供的任何大小和密度特定的資源。例如,如果設備具有高密度屏幕並且應用程序請求可繪製資源,則系統會查找最適合設備配置的可繪製資源目錄。根據可用的其他替代資源,具有hdpi限定符(如drawable-hdpi /)的資源目錄可能是最佳匹配項,因此係統將使用此目錄中的可繪製資源。

如果沒有匹配的資源可用,系統將使用默認資源並根據需要向上或向下縮放以匹配當前屏幕大小和密度 「默認」資源是那些未使用配置限定符進行標記的資源。例如,drawable /中的資源是默認的可繪製資源。系統假定默認資源是爲基準屏幕大小和密度而設計的,這是正常的屏幕大小和中等密度。因此,系統會根據情況縮放高密度屏幕的默認密度資源,降低低密度屏幕的密度資源。 但是,當系統正在查找特定於密度的資源並且未在密度特定的目錄中找到它時,它不會始終使用默認資源。系統可以改爲使用其他密度特定資源之一,以便在縮放時提供更好的結果。例如,當查找低密度資源並且該資源不可用時,系統傾向於縮減資源的高密度版本,因爲系統可以輕鬆地將高密度資源縮減爲低密度資源因子爲0.5,與中等密度資源縮小0.75倍相比,僞影更少。

Source

+0

但爲什麼背景通常工作?我用dpi限定符放入目錄中的xml與原始文件相同。當系統採用默認的可繪製文件夾時,它是同一個文件夾,但它似乎無法在其中找到它或類似的東西 – BennyP

+0

@BennyP它取決於設備和資源文件的分辨率。當系統從默認的可繪製文件夾獲取資源時,每次將其縮放以適合屏幕。縮放過程使用內存。如果縮放過程使用太多的內存,可能會導致錯誤或性能問題。例如,使用背景圖像(默認可繪製文件夾)可以在Galaxy S3上運行,但可能會在Galaxy S4上發生崩潰。我在4-5年前面臨類似的問題。 –

+0

瞭解並接受 – BennyP

相關問題