0

首先让我声明这个问题与我的原生 Android 应用程序的 Map v2 API 有关。其次,我查看了一些关于如何检测 Map v2 API 上的平移更改的 stackOverflow 帖子(例如,如何在 Google Map API v2 中处理地图的 onTouch 事件?),但在这一点上,这些解决方案似乎有点考虑到我的要求,有点矫枉过正。

这是我想要完成的...

检测用户是否更改了地图的原始相机位置(缩放或平移),如果是,则在地图上显示重置按钮,以便用户可以通过点击重置按钮简单地将地图重置为原始位置。

这是我的方法......

为此,我使用“OnCameraChangeListener getCameraChangeListener()”回调和回调测试传入的相机位置(通过 onCameraChange(CameraPosition 位置)是否与渲染地图的“原始”相机位置不同。如果不同,则我显示重置按钮,以便用户可以将地图返回到它的位置。

这是我遇到的问题....

一切都按预期工作,除了当调用“OnCameraChange”回调以响应将地图图像重置为其“原始”位置(通过“重置”按钮)时,通过“onCameraChange”回调传入的相机“位置”不会t 匹配“原始”地图位置(如我所料),即使地图已适当重置。

这给我带来了一个问题,因为如果通过回调传入的相机位置与“原始”位置不匹配,那么我会使重置按钮可见。但是因为我已经成功地将地图重置到它的原始位置,所以我不再希望重置按钮可见......因此我的问题。

这里是我需要你帮助的地方......

  • 我在这里想念什么?如上所述,我预计最后一次回调中返回的地图“位置”(通过 onCameraChange)将与“原始”相机位置相匹配......毕竟重置为“原始”地图位置是触发的最后一次 onCameraChange 回调。

问候。

4

2 回答 2

1

我刚刚对此进行了测试,并且还报告了gmaps-api-issues

现在您必须编写自己的equals(CameraPosition, CameraPosition),其中考虑到目标LatLng的差异很小。

我的测试表明:

CameraPosition{target=lat/lng: (0.2345,12.98231), zoom=5.4231, tilt=13.33, bearing=40.0}
CameraPosition{target=lat/lng: (0.23449985034422136,12.982310056686401), zoom=5.4231, tilt=13.33, bearing=40.0}
于 2013-05-07T21:47:48.710 回答
0

看起来精度丢失了,因为 GMaps 在传递给 onCameraChange 之前将 LatLng 值从 Double 转换为浮点数

这适用于我的情况:

            public boolean equals(LatLng original, LatLng target) {
                return ((float) original.latitude == (float) target.latitude 
                    || (float) original.longitude == (float) target.longitude);
            }
于 2015-02-26T13:57:29.383 回答