LRUCache BitmapDrawable

时间:2018-06-04 10:00:49

标签: android image-resizing bounds android-lru-cache bitmapdrawable

我使用LruCache缓存我的应用程序中使用的很多小BitmapDrawable。问题是我使用图像的不同地方的尺寸不同。

我在从缓存中检索drawable之前设置了边界,然后将其设置为ImageView以获得正确的大小。

当我设置边界时,drawable也会在其他位置调整大小。

如何在不使用drawable.getConstantState().newDrawable()的情况下解决此问题?滚动列表视图时,从缓存的drawable创建一个新的drawable非常慢。

在DynamicDrawableSpans中使用相同的图像,我无法在跨度上设置边界,只能在drawable上直接设置。

在单独的缓存中为不同的上下文缓存相同的可绘制图像是否明智?

1 个答案:

答案 0 :(得分:1)

我让它正常工作。

我将LruCache类型从BitmapDrawable更改为Bitmap。这样,缓存只存储位图图像,而不存储可绘制边界。

当我想设置位图时,我将其转换为BitmapDrawable

Drawable d = new BitmapDrawable(getResources(), bitmap);

然后我为新创建的可绘制实例设置边界

d.setBounds(0, 0, sizex, sizey);

这样,Bitmap的每个实例都是一个单独的Drawable,有自己的Bounds。