在Google Play Services 6.5中,对SupportMapFragment和MapFragment进行了各种更新,包括自动添加地图工具栏,这是一个小条,当您单击标记时会显示,如下所示:
http://android-developers.blogspot.com/2014/11/google-play-services-65.html
对于我的应用程序,我用自己的地图覆盖 OnMarkerClickListener,以便我可以处理一些自定义内容,包括覆盖相机捕捉到标记位置的默认行为。
当我覆盖地图OnMarkerClickListener时,我发现这反过来又覆盖了默认行为,即当用户单击标记时,地图工具栏会自动显示。我的问题是,我可以以某种方式使此工具栏自动显示在我的自定义 OnMarkerClickListener 中,还是由于我覆盖了标记单击而基本上会失去工具栏功能?
感谢 stkent 和 ztan 引导我找到答案。我最初的问题是如何调用工具栏手动启动,但它实际上是出于需要覆盖摄像机动画的默认行为以在地图上居中标记。您仍然可以触发工具栏显示并将相机保持在当前位置,如下所示:
mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
mRootView.post(new Runnable() {
@Override
public void run() {
mMap.animateCamera(CameraUpdateFactory.newLatLng(
mMap.getCameraPosition().target));
}
});
return false;
}
});
基本上,相机将从系统中获取更新,但是在下一帧中,由于我们已经发布了它,它将获得我们的相机更新,我们的相机更新将覆盖系统更新,因此相机根本不会移动。希望这可以帮助其他有相同问题的人。如果您想通过放置来覆盖显示其信息的标记,您可能会做同样的技巧
marker.hideInfoWindow()
因此,在可运行中,您将覆盖其他两个操作,而不会覆盖工具栏的显示。
只要您在OnMarkerClickListener()
中return false
,就会显示工具栏。我还在我的示例应用程序中对其进行了测试,当我返回 false 时它会显示 botom 工具栏,当我返回 true 时它不显示工具栏。
根据 OnMarkClickListener() 引用,如果侦听器使用了事件(即,默认行为不应发生),则为 true,否则为 false(即,默认行为应该发生)。