无法通过OnMapReady方法访问我的地图

时间:2019-01-06 01:32:39

标签: c# android google-maps xamarin geolocation

我以前从未在Xamarin中做过任何事情,而在Android中则很少。我确实知道C,C ++和一些C#。

这不是Xamarin形式。

我已经搜索了一段时间,却一无所获。更令人沮丧的是,我发现人们可以在无法访问时通过其他方法简单地访问其Google地图。

当然,我可以在这里访问我的地图。这是有限的兴趣,因为我想在初始化后进行交互。

public void OnMapReady(GoogleMap googleMap)
    {
        locationManager = GetSystemService(LocationService) as LocationManager;
        MapStyleOptions style;
        string styleString;
        using (StreamReader sr = new StreamReader(Assets.Open("map_style.json")))
            styleString = sr.ReadToEnd();
        style = new MapStyleOptions(styleString);
        googleMap.UiSettings.ZoomControlsEnabled = false;
        googleMap.UiSettings.CompassEnabled = false;
        googleMap.UiSettings.RotateGesturesEnabled = false;
        googleMap.UiSettings.TiltGesturesEnabled = false;
        googleMap.UiSettings.MyLocationButtonEnabled = false;
        googleMap.UiSettings.ZoomGesturesEnabled = false;
        googleMap.UiSettings.ScrollGesturesEnabled = false;
        googleMap.UiSettings.MapToolbarEnabled = false;
        googleMap.SetMapStyle(style);
        LatLng coords = new LatLng(lat, longi);
        CameraUpdate pos = CameraUpdateFactory.NewCameraPosition(new CameraPosition(coords, 19, 50, 0));
        googleMap.MoveCamera(pos);
        GMap = googleMap;
    }

在这里,我尝试通过任何可能的方式访问我的地图。评论的内容不起作用,我还尝试声明了指针,以后我将在OnMapReady中将其分配给googlemap,这是不允许的。

    public void OnLocationChanged(Location location)
    {
        lat = location.Latitude;
        longi = location.Longitude;
        LatLng coords = new LatLng(lat, longi);
        CameraUpdate pos = CameraUpdateFactory.NewCameraPosition(new CameraPosition(coords, 19, 50, 0));
        //googleMap.MoveCamera(pos); 
        //FragmentManager.FindFragmentById<MapFragment>(Resource.Id.googlemap).???
    }

我看到人们刚刚从任何地方访问他们的Google地图。 以上所有代码均来自我的主要活动。

我不知道它是否重要,但这是整个axml文件。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <fragment  
        android:id="@+id/googlemap"  
        android:layout_width="match_parent"  
        android:layout_height="match_parent"  
        class="com.google.android.gms.maps.MapFragment" />  
</RelativeLayout>

因此,一个大主意是,只要位置发生更改,我就想通过在OnLocationchanged中进行

这样的操作来移动地图
googleMap.MoveCamera(pos);

提前谢谢。

2 个答案:

答案 0 :(得分:1)

您将GoogleMap实例存储在GMap末尾的名为OnMapReady的变量中。

因此在您的OnLocationChanged中使用该实例:

GMap?.MoveCamera(pos); 

答案 1 :(得分:0)

moveCamera只能在主线程上调用。