我有一个奇怪的问题,我真的不知道如何解决,所以我想知道以前是否有人遇到过类似的问题。
我覆盖 ItemizedOverlay 子类中的 draw(Canvas canvas, MapView mapView, boolean shadow) 方法以在项目之间绘制一些路径、文本等。我在覆盖中做的第一件事是使用所有这些参数调用 super.draw。当我启动应用程序时,我在覆盖中绘制的线条是它们应该在的位置,但是 super.draw 绘制的实际 OverlayItems 是很远的。有趣的是,当我将地图移向左上角(坐标 0,0)时,OverlayItems 越来越接近我期望它们所在的位置(事实上,当我得到第一个时,它们似乎完美匹配项目到点 (0,0))。当我移动地图以使 OverlayItem 离 (0,0) 点更远时,它们会线性地离它们的地理位置更远。
如果以前没有人遇到过这个问题并且它不是很明显,我将尝试制作一个仍然具有此行为的最小示例并将其发布在这里。实际代码相对较大,所以如果有人知道可能是什么问题,我想避免那么多工作。
编辑:一条可能有用的附加信息......我的绘制方法如下所示:
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
super.draw(canvas, mapView, shadow);
if (!shadow) {
// code for drawing the lines etc.
// on the canvas (uses mapView.getProjection())
}
}
叠加层的自定义部分没有阴影层(我在毫无问题地扩展叠加层时使用了相同的逻辑)。super.draw 为 OverlayItems 绘制的阴影层实际上位于 Drawable 和每个特定项目的预期地理位置之间。
以下是来自 avd 的树形屏幕截图,以更好地说明正在发生的事情。四个红色大头针应该在它们上方的红线上,当我将地图滑向左上方时,它实际上会朝着这条线移动。这两个引脚和它们之间的线是在我的自定义覆盖中绘制的,super.draw 绘制了四个阴影和四个额外的红色引脚。
由于这是我的第一篇文章,我不能发布多个链接,所以我将所有三个屏幕截图放在同一个 jpg 上。
截屏