C# 无法通过OnMapReady方法访问我的地图
我以前从未在Xamarin中做过任何事情,在Android中做的很少。我知道C、C++和一些C语言。 这不是Xamarin表单 我找了一会儿,什么也没找到。更令人沮丧的是,我发现人们可以在我无法访问他们的谷歌地图时,直接从其他方法访问他们的谷歌地图 当然,在这里,我可以访问我的地图。这是有限的兴趣,因为我想互动后,初始化它C# 无法通过OnMapReady方法访问我的地图,c#,android,google-maps,xamarin,geolocation,C#,Android,Google Maps,Xamarin,Geolocation,我以前从未在Xamarin中做过任何事情,在Android中做的很少。我知道C、C++和一些C语言。 这不是Xamarin表单 我找了一会儿,什么也没找到。更令人沮丧的是,我发现人们可以在我无法访问他们的谷歌地图时,直接从其他方法访问他们的谷歌地图 当然,在这里,我可以访问我的地图。这是有限的兴趣,因为我想互动后,初始化它 public void OnMapReady(GoogleMap googleMap) { locationManager = GetSystemSe
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).???
}
提前感谢。您正在将GoogleMap实例存储在名为
GMap
的变量中,该变量位于您的OnMapReady
末尾
因此,在您的OnLocationChanged
中使用该实例:
GMap?.MoveCamera(pos);
只能在主线程上调用moveCamera 哦,我也这么做了。它也不起作用。因为我认为是另一个谷歌地图链接到。。。碎片还是什么?我对Xamarin和Android都不是很了解。不管怎样,用GMap这样做都不起作用。@Tohkai
。不起作用….
什么不起作用?是否为空,不移动摄像机等。。。?例外/Stacktrace/…?没关系,你说得对,我猜GMap/实际上是对实际地图的引用。我试着在OnMapReady中使用GMap.MoveCamera(pos),它成功了,因此,问题不是来自地图,而是我的“OnLocationChanged”方法没有被调用。看来我得调查一下了……我们没关系。正如我所说,这可能是一个在退出OnMapReady范围时丢失的副本。无论何时从外部调用moveCamera方法,它都无法工作。如中所示,当调用moveCamera时,它只是从不处理,线程永远不会到达它后面的行。然而,它在OnMapredy中工作。所以我相信我问的问题是正确的——我如何从这些方法之外影响我的地图?@Tohkai假设你有一个有效的GoogleMap
,确保你在UI/主线程(RunOnUiThread
)上调用MoveCamera
)。
googleMap.MoveCamera(pos);
GMap?.MoveCamera(pos);