自定义地图与POI

时间:2012-06-26 09:35:38

标签: android drawing

我必须在我的应用程序上实现一个音乐厅的小地图。 它上面会有POI,我必须能够放大,移动它等等......

我做了一个使用转换为Picture的svg文件的类,我扩展了ImageView并覆盖了onDraw。

但是现在我必须用1.2Meg png做同样的事情,而我得到的只是内存错误..

我使用BitmapFactory.decodeResource, and then canvas.drawBitmap(bm, canvas.getMatrix(),null)

有人在某个地方有教程,或者只是告诉我我的方法有什么问题吗?

谢谢!

雷诺

1 个答案:

答案 0 :(得分:1)

虽然PNG文件在磁盘上占用1.2MB,但它将被解码为内存中的RGB位图,这将大得多。例如,800x600像素的24位RGB位图占用的内存不到1.4MB,而压缩到PNG时可能小到30kB。

解决方案是仅渲染当前可在屏幕上看到的地图子部分。

为了简化这一过程,您可以将源图像分割成大小为屏幕大小1/4的块。这确保了在任何时候,这些较小的图像中不会有超过9个加载到内存中:

+--+----------+--------+
|1 |    2     |   3    |
+--+----------+--------+
|  |          |        |
|4 |    5     |   6    |
|  |          |        |
|  |          |        |
+--+----------+--------+
|  |          |        |
|7 |    8     |   9    |
|  |          |        |
+--+----------+--------+

当图像完美对齐时,您只需要在内存中有4张图像。在滚动时进行优化,可以按滚动方向预取图像。

如果您的地图是10000x10000像素,并且您的屏幕是480x800,请展开图像的边缘以使其具有一段时间或黑色(或您喜欢的任何背景颜色!)边缘,以便可以均匀地分割。在这种情况下,您将使用10080x10400。