我试图实现加载屏幕,因为GoogleMaps
有时需要大约2秒才能加载。我尝试使用RelativeLayout
并将ImageView
置于地图fragment
上方,并在地图加载后将其设为ViewStates.Gone
。但是,我注意到加载发生在base.OnCreateBundle
上而不是SetUpMap()
上,现在我无法理解如何实现它。
private GoogleMap mMap;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Map);
mSplash = FindViewById<ImageView>(Resource.Id.splash);
SetUpMap();
}
private void SetUpMap()
{
if (mMap == null)
{
FragmentManager.FindFragmentById<MapFragment(Resource.Id.map).GetMapAsync(this);
}
}
public void OnMapReady(GoogleMap googleMap)
{
mSplash.Visibility = ViewStates.Gone;
mMap = googleMap;
mMap.MapType = GoogleMap.MapTypeSatellite;
(...)
}
答案 0 :(得分:1)
如果我没弄错的话,OnMapReady用于验证Google Play服务是否已在设备上安装并处于活动状态。正如文档所说:
如果设备上未安装Google Play服务,则用户会 系统会提示您安装它,并且onMapReady(GoogleMap)方法会 只有在用户安装并返回时才触发 应用
或者,OnMapLoaded函数应在地图完成加载其图块后调用。
地图完成渲染后调用。这只会被调用 一旦。如果您想收到通知,您必须请求另一个回调 试。
一旦引用了地图,首先设置回调,就可以实现OnMapLoaded功能
mMap.setOnMapLoadedCallback(this);
通过简单地覆盖OnMapLoaded函数并相应地处理它来完成
@Override
public void onMapLoaded() {
if (mMap != null) {
mSplash.Visibility = ViewStates.Gone;
}
}
请记住,如果您需要再次加载地图并需要显示另一个启动画面,则首先需要再次设置回调,因为onMapLoaded仅在每次回调时调用一次。