gpt4 book ai didi

android - Google Maps API V2 addMarker 和 OnCameraChangeListener

转载 作者:太空宇宙 更新时间:2023-11-03 12:57:58 24 4
gpt4 key购买 nike

场景

  • 读取初始用户位置并添加标记 + 将相机位置设置为该位置。
  • 每次用户拖动/缩放相机时,我都需要调用网络服务并传递 map 的矩形坐标。此 Web 服务返回一个位置列表,这些位置将显示为 map 范围内的标记。

所以基本上我在做类似的事情:

onCreate

mMap.setOnCameraChangeListener(new OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition cameraPosition) {
// Make a web call for the locations
myTask = new MyTask();
myTask.execute();
}

在任务 onPostExecute 中为我创建的网络服务返回的每个项目:

mMap.addMarker(
new MarkerOptions().position(
new LatLng(myPoint.getLatitude(), myPoint.getLongitude())
)
.icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_pushpin))
);

预期行为::每次用户滚动或缩放时,相机位置都会发生变化,异步任务会再次被调用以获取一批新的 Activity 坐标

实际行为:onPostExecuteOnCameraChangeListener 之间的无限循环。

在我看来,也许我错了,addMarker 触发了相机更改事件?我怎样才能做出上述预期的行为?

最佳答案

From what it seems to me, but maybe I am wrong, the addMarker triggers a camera change event ?

不,它没有。您可能想为其他人添加完整代码以尝试解决这个难题。

The expected behavior:: each time the user scrolls or zooms, the camera position changes and the async task gets called again to get a fresh batch of active coordinates

为什么每次用户更改相机位置时都希望获取相同的数据?

改善用户体验的一些注意事项:

  • 只获取一次所有数据并将它们存储到 SQLite 数据库中。当然,如果数据发生变化,您需要同步它们,这可能需要稍微更改 webservice。不要在简单的用户界面更改上下载所有内容。
  • 将 Web 服务通信保持在 Activity 上下文之外,以实现无内存泄漏解决方案。如果您将 MyTask 作为 Activity 中的内部类,这将在任务完成之前一直在内存中销毁 Activity
  • 只在可见区域添加标记,如果已经添加则不删除它们。标记的数量会不断增加,但总比每次用户移动 map 时调用 clear() 要好。正如 CommonsWare 正确建议的那样:IPC 越少越好。为此,我可以建议 Android Maps Extensions .即使您不使用标记聚类,它也有动态添加标记的选项,因此您无需自己编写。

关于android - Google Maps API V2 addMarker 和 OnCameraChangeListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16531651/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com