如何正确使用自定义视图位图?

How to properly work with custom Views bitmap?

我正在扩展一个 View 显示位图的位置,根据我的需要进行修改。

我想要并且很可能需要将该位图保持为 variable/object 的原始大小,以防它被放大而不会失去质量。

当我大量使用这些自定义视图时,似乎会产生 OutOfMemory 错误。

现在我想知道在这种情况下如何使用位图? ImageView怎么处理的毫无问题? 他们怎么做到的?在动态调整视图大小后,它们如何保持质量?

有人对这个话题有什么建议吗?

谢谢。

要解决您的问题,您应该只为那些当前可见的视图在内存中存储位图以节省内存。

您还应该存储缩小版本的位图以节省内存。 BitmapFactory class has special mechanism for this. Use inJustDecodeBounds property of BitmapFactory.Options class to load width and height of the image without memory allocation for the image itself. Then calculate the value for inSampleSize property and use this property to load scaled down bitmap. Read this article 进行更深入的描述。

这些问题(以及其他有关显示图像的问题)已在第三方库中得到解决:Glide, Fresco 和其他。这些库被广泛使用,因此您也可以使用它们。还有比如 Glide 支持修改图片的扩展。

如果您想要具有缩放功能的图像视图,library 非常有用。它包括捏缩放、平移、旋转和动画支持,并允许轻松扩展。该视图甚至可以选择使用子采样和图块来支持非常大的图像。