我正在扩展View
,在其中显示位图,并根据需要进行修改。
我希望并且最有可能需要将该位图保留为原始大小,以防变量/对象被放大,以免丢失质量。
当我使用很多这些自定义视图时,似乎会产生OutOfMemory
错误。
现在,我想知道在这种情况下如何使用位图?ImageView
如何毫无问题地处理它?他们如何做到这一点?动态调整视图大小后,它们如何保持质量?
有人对此主题有任何建议吗?
谢谢。
为了解决您的问题,您只应将当前存储在视图中的位图存储在内存中。
此外,您还应该存储缩小版本的位图以节省内存。BitmapFactory
类对此具有特殊的机制。使用BitmapFactory
类的inJustDecodeBounds
属性可以加载图像的宽度和高度,而无需为图像本身分配内存。然后计算inJustDecodeBounds
属性的值,并使用此属性加载按比例缩小的位图。阅读BitmapFactory.Options
以获得更详细的说明。
这些问题(以及其他与显示图像有关的问题)已在第三方库中解决:inSampleSize
,inSampleSize
等。这些库被广泛使用,因此您也可以使用它们。同样,例如,Glide支持扩展以修改图像。
如果要具有缩放功能的图像视图,最好使用this article。它包括缩放,平移,旋转和动画支持,并易于扩展。该视图甚至可以选择使用子采样和图块来支持非常大的图像。