在使用GoogleMap Lite的ViewHolder时,作为RecyclerView中行的一部分,我正在寻找回调来在Map准备就绪时设置引脚位置。我在下面找到了这两个功能。
OnMapLoadedCallback:https://developers.google.com/android/reference/com/google/android/gms/maps/GoogleMap.OnMapLoadedCallback?hl=en
OnMapReadyCallback:https://developers.google.com/android/reference/com/google/android/gms/maps/OnMapReadyCallback
两者都经证明有效且可用(如下所示)。因此,我很困惑,如果他们确实有任何特定的不同行为应该在不同的场合使用,或者他们确实相似,可以互换使用?
使用OnMapLoadedCallback:
LatLngBounds.Builder builder = new LatLngBounds.Builder();
for (Marker marker : markers) {
builder.include(marker.getPosition());
}
final CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngBounds(builder.build(), 0);
googleMap.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {
@Override
public void onMapLoaded() {
googleMap.moveCamera(cameraUpdate);
}
});
使用OnMapReadyCallback:
LatLngBounds.Builder builder = new LatLngBounds.Builder();
for (Marker marker : markers) {
builder.include(marker.getPosition());
}
final CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngBounds(builder.build(), 0);
mapView.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(GoogleMap googleMap) {
googleMap.moveCamera(cameraUpdate);
}
});
谢谢!
答案 0 :(得分:6)
您可以安全地使用OnMapReadyCallback
来设置您的引脚。只要地图准备就绪,您就可以使用它。
OnMapLoadedCallback
被称为
地图完成渲染后。这发生在所有瓷砖之后 已经获取了渲染地图所需的所有标签 完整。
例如。地图的内容已完全加载且可见。
这比OnMapReady晚发生。我没有理由等待那件事。
编辑:电话googleMap.setOnMapLoadedCallback
甚至意味着OnMapReady
已经碰巧能够被安全地召唤(googleMap != null
)。
答案 1 :(得分:2)
正如 Google文档所说:
<强> 1。 OnMapLoadedCallback:
地图完成渲染后调用。这只会被调用 一旦。如果您想收到通知,您必须请求另一个回调 试。
因此,您必须检查 googleMap是否为空。如果为null,则必须初始化它。所有地图图块都已呈现,所有标签也按照文档中的定义完成。
<强> 2。 OnMapReadyCallback:
在MapFragment或MapView上设置此接口的实例后 对象,地图时触发onMapReady(GoogleMap)方法 准备使用并提供GoogleMap的非null实例。
因此,您不必在 onMapReady()方法中检查 null 。
答案 2 :(得分:0)
在OnMapReadyCallback
和OnMapLoadedCallback
的来电之间存在差距。在这个间隙图中已经不是空的,但它的部分可能最终没有被初始化。在极少数情况下,在IllegalStateException
之后和OnMapReadyCallback
之前执行某些方法后,您可以获得OnMapLoadedCallback
。例如,移动地图相机可以通过map.moveCamera
或map.animateCamera
来启用它。
但另一方面,等待OnMapLoadedCallback
会延长你的地图初始化,用户可以看到这一点。
我决定使用这种方法
mapFragment.getMapAsync(new OnMapReadyCallback()
{
@Override
public void onMapReady(GoogleMap googleMap)
{
try {
setUpMap();
}
catch (IllegalStateException e)
{
map.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback()
{
@Override
public void onMapLoaded() {
setUpMap();
}
});
}
}
});
答案 3 :(得分:-1)
OnMapLoadedCallback用于循环,例如标记中的自定义照片。
OnMapReadyCallback用于静态标记。