无法通过 OnMapReady 方法访问我的地图
Cannot access my map out of the OnMapReady method
我以前从未在 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 地图。
以上所有代码均来自我的主activity.
我不知道它是否重要,但这是整个 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);
提前致谢。
您将 GoogleMap 实例存储在 OnMapReady
末尾名为 GMap
的变量中。
因此在您的 OnLocationChanged
中使用该实例:
GMap?.MoveCamera(pos);
moveCamera只能在主线程调用。
我以前从未在 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 地图。 以上所有代码均来自我的主activity.
我不知道它是否重要,但这是整个 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);
提前致谢。
您将 GoogleMap 实例存储在 OnMapReady
末尾名为 GMap
的变量中。
因此在您的 OnLocationChanged
中使用该实例:
GMap?.MoveCamera(pos);
moveCamera只能在主线程调用。