我正在尝试根据我的位置更新启动时放置的标记的位置。但是,应用程序打开时会放置第一个标记,但不会更新。没有看到任何物理变化,“Timer called”正被写入控制台,所以我知道计时器正在工作。 我的问题:为什么不通过计时器更新我的标记的位置? 此外,如果有更好的方式,我愿意接受建议。
这是我的代码:
GoogleMap mMap;
LocationManager _locationManager;
Location _currentLocation;
String _locationProvider;
TextView addresstxt;
MarkerOptions options = new MarkerOptions();
public void OnMapReady(GoogleMap googleMap)// This works as it should on start up.
{
mMap = googleMap;
LatLng latlng = new LatLng(_currentLocation.Latitude, _currentLocation.Longitude);
CameraUpdate camera = CameraUpdateFactory.NewLatLngZoom(latlng, 18);
mMap.MoveCamera(camera);
options.SetPosition(latlng);
options.SetTitle("Vehicle");
options.SetSnippet("Your vehicle is here.");
options.Draggable(false);
mMap.AddMarker(options);
}
private void CountDown()
{
System.Timers.Timer timer = new System.Timers.Timer();
timer.Interval = 1000;
timer.Elapsed += OnTimedEvent;
timer.Enabled = true;
}
private void OnTimedEvent(object sender, System.Timers.ElapsedEventArgs e)
{
Console.WriteLine("Timer called");
mMap.Clear();
LatLng latlng = new LatLng(_currentLocation.Latitude, _currentLocation.Longitude);
CameraUpdate camera = CameraUpdateFactory.NewLatLngZoom(latlng, 18);
mMap.MoveCamera(camera);
MarkerOptions options = new MarkerOptions()
.SetPosition(latlng)
.SetTitle("Vehicle")
.SetSnippet("Your vehicle is here.")
.Draggable(false);
mMap.AddMarker(options);
}
答案 0 :(得分:1)
我猜这可能是因为你永远无法知道运行定时器回调的线程,并且通常需要在UI线程上进行UI更新。尝试运行代码以使用RunOnUiThread()更新UI线程上的标记,例如:
RunOnUiThread(() =>
{
mMap.Clear();
LatLng latlng = new LatLng(_currentLocation.Latitude, _currentLocation.Longitude);
CameraUpdate camera = CameraUpdateFactory.NewLatLngZoom(latlng, 18);
mMap.MoveCamera(camera);
MarkerOptions options = new MarkerOptions()
.SetPosition(latlng)
.SetTitle("Vehicle")
.SetSnippet("Your vehicle is here.")
.Draggable(false);
mMap.AddMarker(options);
});