OnCameraChange未返回预期值

时间:2013-05-07 18:07:59

标签: android maps android-maps-v2

首先让我说明这个问题涉及我的原生Android应用程序的Map v2 API。其次,我看了一些关于如何检测Map v2 API上的平移更改的stackOverflow帖子(例如How to handle onTouch event for map in Google Map API v2?),但在这一点上,根据我的要求,这些解决方案似乎有点过分。

这是我想要完成的......

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

这是我的方法.....

为了实现这一点,我使用“OnCameraChangeListener getCameraChangeListener()”回调并在回调测试中传入的摄像机位置(通过onCameraChange(CameraPosition位置)是否与渲染地图的“原始”摄像机位置不同。如果是然后我显示重置按钮,以便用户可以将地图返回到它的位置。

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

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

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

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

  • 我在这里失踪了什么?如上所述,我原本预计在最后一个回调中返回的地图“位置”(通过onCameraChange)将匹配“原始”摄像机位置...在所有重置到“原始”地图位置之后触发该位置最后onCameraChange回调。

的问候。

2 个答案:

答案 0 :(得分:1)

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

现在你必须编写自己的equals(CameraPosition, CameraPosition),其中考虑到accont目标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}

答案 1 :(得分: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);
            }