2017-03-05 5 views
0

eine einfache Karte Machen Sie mit Xamarin Form, bu der Karte Tracking blinkt gehalten:Google Karte blinkt während an Ort hören

public partial class MainPage : ContentPage 
    { 
     public MainPage() 
     { 
      InitializeComponent(); 

      GetCurrentPosition(); 
     } 
     public async void GetCurrentPosition() 
     { 
      var locator = CrossGeolocator.Current; 
      locator.DesiredAccuracy = 50; 

      locator.PositionChanged += (s, e) => 
      { 
       var map = new Map(
       MapSpan.FromCenterAndRadius(
        new Position(e.Position.Latitude, e.Position.Longitude), Distance.FromMiles(0.3))) 
       { 
        IsShowingUser = true, 
        HeightRequest = 100, 
        WidthRequest = 960, 
        VerticalOptions = LayoutOptions.FillAndExpand 
       }; 
       var stack = new StackLayout { Spacing = 0 }; 
       stack.Children.Add(map); 
       Content = stack; 
      }; 

      if (!locator.IsListening) 
      { 
       await locator.StartListeningAsync(1000, 0); 
      } 
     } 
    } 

Wie kann ich es lösen?

+0

Sie eine Karte zum StackLayout auf jeder Position Ereignis hinzufügen. – Cheesebaron

Antwort

0

Das ist normal. Das ist, weil Sie jedes Mal, wenn der Standort aktualisiert wird, eine neue Karte erstellen, die Sie der Seite hinzufügen (daher das Blinken). Stattdessen sollten Sie dieselbe Instanz Ihrer Karte beibehalten und die Position dieser Karte aktualisieren.

Sie können dies versuchen:

public partial class MainPage : ContentPage 
    {   
     private Map _map; 
     public MainPage() 
     { 
      InitializeComponent(); 
      _map = new Map 
      { 
       IsShowingUser = true, 
       HeightRequest = 100, 
       WidthRequest = 960, 
       VerticalOptions = LayoutOptions.FillAndExpand 
      }; 
      var stack = new StackLayout { Spacing = 0 }; 
      stack.Children.Add(_map); 
      Content = stack; 
      GetCurrentPosition(); 
     } 
     public async void GetCurrentPosition() 
     { 
      var locator = CrossGeolocator.Current; 
      locator.DesiredAccuracy = 50; 

      locator.PositionChanged += (s, e) => 
      { 
       _map.MoveToRegion(
       MapSpan.FromCenterAndRadius(
        new Position(e.Position.Latitude, e.Position.Longitude), Distance.FromMiles(0.3))); 
      }; 

      if (!locator.IsListening) 
      { 
       await locator.StartListeningAsync(1000, 0); 
      } 
     } 
    }