Невозможно получить доступ к моей карте из метода OnMapReady - PullRequest
0 голосов
/ 06 января 2019

Я никогда ничего раньше не делал в 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;
    }

здесь я пытаюсь получить доступ к моей карте любым возможным способом. Комментарии не работают, я также пытался объявить указатели, которые позже назначу googlemap в OnMapReady, что было запрещено.

    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 голосов
/ 08 января 2019

moveCamera можно вызывать только в основном потоке.

0 голосов
/ 06 января 2019

Вы храните экземпляр GoogleMap в переменной с именем GMap в конце вашего OnMapReady.

Так что в вашем OnLocationChanged используйте этот экземпляр:

GMap?.MoveCamera(pos); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...