2017-02-25 39 views
0

在列表視圖中,對於每個項目,它需要爲不同的項目名稱顯示一些圖像(可繪製)。如果名稱相同,則顯示相同的圖像。 drawable是特定的,需要花費一些時間才能生成它(需要遠程資源)。 所以想想也許緩存可繪製的,只有建立一個新的,如果它沒有被緩存。 看到一些文章「ANDROID可拉伸的實例 - 不要分享它們!」 http://loseyourmarbles.co/2013/09/android-drawable-instances-dont-share/,可以在多個imageView上使用一個可繪製實例嗎?

這裏還需要對drawable進行動畫處理。但測試似乎沒有看到不好的行爲(可能沒有足夠的測試)?

因此,任何人都有類似的要求,並經歷一個可繪製的實例是否可以在多個ImageView上使用?這種方法正確的方式來加快列表視圖?

或者可以在多個imageView上使用一個可繪製的實例嗎?

HashMap<String, Drawable> mNameToDrawnable = new HashMap<>(); 

public Drawable getDrawable(Context context, String displayName){ 

    Drawable cachedD = mNameToDrawnable.get(displayName); 
    if (cachedD != null) { 
     return cachedD; 
    } 

    Drawnable d = makeDrawable(displayName); //new Drawable(context.getResources());, etc …… 
    d.setDecodeDimensions(100, 100); 

    mNameToDrawnable.put(displayName, d); 

    return d; 
} 

回答

1

如果你想使用緩存的繪製你的ListView和你擔心一些問題,但你可能要調用變異()在你的繪製。這可能會讓你更好地理解:https://android-developers.googleblog.com/2009/05/drawable-mutations.html?m=1

+0

感謝Piotr!它提到的文章中唯一的區別是列表中每個列表項都有新的可繪製實例。如果有多個項目共享相同的可繪製實例,則不確定是否有什麼擔心。 – lannyf

+0

嗯,我想這真的取決於你的情況。如果你不以任何方式修改drawable,它可能會起作用。我會盡可能地檢查各種操作系統版本。 –

相關問題