【发布时间】:2012-12-06 16:28:51
【问题描述】:
我的应用正在加载一个大图像(房屋平面图),然后在图像上绘制触摸反应对象(家具、灯具等)。我的应用程序包含一个基本图像文件,但对象来自我数据库中的坐标。
我已经在多次迭代中成功部署了该应用程序,但现在我需要使用更大的基础映像,并且BitmapFactory 在许多设备(新旧设备)上导致了OutOfMemory 异常;似乎任何具有 link 对我没有帮助,因为分辨率/缩放对应用程序的功能至关重要。
我曾尝试在加载前测试设备的可用内存,但结果充其量是参差不齐的(某些设备,如 Galaxy S3 报告大量堆但仍然崩溃)。我也尝试过降低分辨率,但是根据上述测试将图像缩小到安全尺寸时,图像变得无法使用。
有没有其他方法可以在不使用位图的情况下实现这种设计? 我需要:
- 加载大型基础图片
- 在基本图像上创建可点击的形状,保持它们相对于基本图像的位置/比例
- 奖励:在我的应用程序的 iOS 版本中,我可以进行 SVG 样式的文本缩放,因此小对象上的长标签将保留在对象内 而不是穿过地图(并且在 图像被放大)。在android中复制这个会让我很开心 代码猴子。
如果需要,我可以发布代码,但你们之前都看过(几乎所有代码都来自 SO)。
提前感谢您的阅读,以及您可以提供的任何帮助。
【问题讨论】:
-
使用图块(图像的小片段)谷歌地图也是如此。
-
您可以将位图存储为一组不同分辨率的图块,例如 Google 地图,然后只加载当前可见的图块。另一种选择是使用 OpenGL 像游戏一样实现它。有很多可以管理大型游戏世界的游戏引擎示例。
-
我见过 OpenGL,但从未使用过。你能推荐一个好的教程吗?
-
@user1810544 - 有很多东西要学。从 Google 的 Android 文档开始。之后,您需要决定是要从头开始编写所有 OpenGL 代码,还是使用 3rd 方游戏引擎。
标签: android out-of-memory bitmapfactory android-drawable