可以在多个imageView上使用一个可绘制实例吗?

时间:2017-02-25 19:37:03

标签: android caching android-imageview android-drawable

在列表视图中,对于每个项目,它需要显示不同项目名称的一些图像(可绘制)。如果名称相同,则显示相同的图像。 drawable是特定的,并且花费一些时间来制作它(需要远程资源)。 所以想想可能缓存drawable并且只有在没有缓存时才构建新的drawable。 看到一些文章" ANDROID DRAWABLE INSTANCES - 不要分享他们!" http://loseyourmarbles.co/2013/09/android-drawable-instances-dont-share/

这里还需要为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 个答案:

答案 0 :(得分:1)

如果你想在listview中使用缓存的drawable并且你担心它的一些问题,你可能想在你的drawable上调用mutate()。这可能会让您更好地理解:https://android-developers.googleblog.com/2009/05/drawable-mutations.html?m=1