首先让我说明这个问题涉及我的原生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位置与“原始”位置不匹配,那么我可以看到重置按钮。但在此,因为我已成功将地图重置为原始位置,我不再希望重置按钮可见...因此我的问题。
这是我需要你帮助的地方......
的问候。
答案 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);
}