我正在使用LruCache缓存整个应用程序中使用的许多小BitmapDrawable。问题是我使用图像的不同地方的尺寸也不同。

当我从缓存中检索可绘制对象之前,我先设置了边界,然后将其设置为ImageView以具有正确的大小。

当我设置范围时,drawable也会在其他地方调整大小。

不使用drawable.getConstantState().newDrawable()怎么解决此问题?滚动列表视图时,从缓存的可绘制对象创建新的可绘制对象非常慢。

在DynamicDrawableSpans中使用相同的图像,在其中我不能在跨度本身上设置边界,只能在可绘制对象上直接设置边界。

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

最佳答案

我知道它能正常工作。

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

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

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


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

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


这样,位图的每个实例都是一个单独的Drawable,具有自己的边界。

10-08 13:56