加载GoogleMaps活动的屏幕

时间:2016-01-01 11:44:33

标签: c# android xamarin

我试图实现加载屏幕,因为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;
    (...)
}

1 个答案:

答案 0 :(得分:1)

如果我没弄错的话,OnMapReady用于验证Google Play服务是否已在设备上安装并处于活动状态。正如文档所说:

  

如果设备上未安装Google Play服务,则用户会   系统会提示您安装它,并且onMapReady(GoogleMap)方法会   只有在用户安装并返回时才触发   应用

OnMapReady Documentation

或者,OnMapLoaded函数应在地图完成加载其图块后调用。

  

地图完成渲染后调用。这只会被调用   一旦。如果您想收到通知,您必须请求另一个回调   试。

OnMapLoaded Documentation

一旦引用了地图,首先设置回调,就可以实现OnMapLoaded功能

 mMap.setOnMapLoadedCallback(this);

通过简单地覆盖OnMapLoaded函数并相应地处理它来完成

@Override
public void onMapLoaded() {
    if (mMap != null) {
        mSplash.Visibility = ViewStates.Gone;
    }
}

请记住,如果您需要再次加载地图并需要显示另一个启动画面,则首先需要再次设置回调,因为onMapLoaded仅在每次回调时调用一次。