android - LRUCache BitmapDrawable
问题描述
我正在使用 LruCache 来缓存我的应用程序中使用的许多小型 BitmapDrawables。问题是我使用图像的不同地方的尺寸不同。
当我从缓存中检索可绘制对象时,我设置了边界,然后将其设置为 ImageView 以具有正确的大小。
当我设置边界时,drawable 也会在其他地方调整大小。
我怎样才能在不使用的情况下解决这个问题drawable.getConstantState().newDrawable()
?滚动列表视图时,从缓存的可绘制对象创建新的可绘制对象非常慢。
在 DynamicDrawableSpans 中使用了相同的图像,我无法在 span 本身上设置边界,只能直接在 drawable 上设置。
在单独的缓存中为不同的上下文缓存相同的可绘制图像是否明智?
解决方案
我让它正常工作。
我将 LruCache 类型从 BitmapDrawable 更改为 Bitmap。这种方式缓存只存储位图图像而不是可绘制的边界。
当我想设置位图时,我将其转换为BitmapDrawable
Drawable d = new BitmapDrawable(getResources(), bitmap);
然后我为新创建的可绘制实例设置边界
d.setBounds(0, 0, sizex, sizey);
这样,位图的每个实例都是Drawable
具有自己边界的单独实例。
推荐阅读
- python - 如何为 pandas 中 col1、col2 的每个组合运行线性回归?
- c - 返回大于数组第一个索引的数字的数量的递归函数
- python - 如何在 tf.data.Dataset.map() 中使用 Keras 的 predict_on_batch?
- java - 我的 Java speedometer 移动应用程序将编译但无法启动
- ruby-on-rails - Ransack 'sort_link' 在列表末尾停止排序
- c++ - Curl - 发送数百个请求,但一次只发送四个 - 编程
- node.js - 使用任何签名验证节点 jsonwebtoken
- django - 如何使用Django ORM查询计算数量乘以价格
- blogger - 如何在移动视图中删除图像周围的白色边框?
- mysql - 字段列表MySql存储过程中的未知列