Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using Android.App;
- using Android.Content;
- using Android.Gms.Maps.Model;
- using Android.Gms.Maps;
- using Android.Graphics;
- using Android.Graphics.Drawables;
- using Android.OS;
- using Android.Runtime;
- using Android.Support.V4.App;
- using Android.Util;
- using Android.Views;
- using Android.Widget;
- using HyperLocal.Common;
- namespace HyperLocal.Demo.Xamdroid
- {
- public class MapFragment : Fragment, GoogleMap.IOnInfoWindowClickListener, GoogleMap.IOnCameraChangeListener, GoogleMap.IOnMarkerClickListener
- {
- List<MarkerInfo> pois = new List<MarkerInfo>();
- private Dictionary<string, MarkerInfo> currentMarkerInfos = new Dictionary<string, MarkerInfo>();
- private MapView mapView;
- private GoogleMap map;
- bool firstLoadWithLocation = true;
- bool shouldAllowCameraChange = true;
- public override View OnCreateView(LayoutInflater layoutInflater, ViewGroup viewGroup, Bundle bundle)
- {
- var view = layoutInflater.Inflate(Resource.Layout.MapDialogFragment, viewGroup, false);
- mapView = view.FindViewById<MapView>(Resource.Id.map);
- mapView.OnCreate(bundle);
- try
- {
- MapsInitializer.Initialize(this.Activity);
- }
- catch (Exception ex)
- {
- Android.Util.Log.Error("ARDEMO", ex.ToString());
- }
- map = mapView.Map;
- map.UiSettings.MyLocationButtonEnabled = true;
- map.SetLocationSource((MainActivity)this.Activity);
- map.SetOnCameraChangeListener (this);
- map.SetOnInfoWindowClickListener(this);
- map.SetOnMarkerClickListener (this);
- Common.Log.Debug("MapFragment->OnCreateView");
- var cu = CameraUpdateFactory.NewCameraPosition(new CameraPosition(new LatLng(PoiService.Instance.CurrentLatitude, PoiService.Instance.CurrentLongitude), 16, 0, 0));
- map.MoveCamera(cu);
- return view;
- }
- public bool OnMarkerClick(Marker marker)
- {
- shouldAllowCameraChange = false;
- Common.Log.Debug ("MapFragment->MarkerClick");
- return false;
- }
- public void OnInfoWindowClick(Marker marker)
- {
- Common.Log.Debug ("MapFragment->OnInfoWindowClick");
- if (currentMarkerInfos.ContainsKey(marker.Id))
- {
- Common.Log.Debug("Marker InfoWindow Clicked: " + marker.Id);
- var markerInfo = currentMarkerInfos[marker.Id];
- var ddf = new DetailsDialogFragment() { Item = markerInfo };
- ddf.Show(this.Activity.SupportFragmentManager, "MDF");
- }
- }
- public async void OnCameraChange (CameraPosition cameraPos)
- {
- Common.Log.Debug ("MapFragment->CameraChange");
- if (!shouldAllowCameraChange) {
- shouldAllowCameraChange = true;
- return;
- }
- var llb = map.Projection.VisibleRegion.LatLngBounds;
- var visibleRadius = GeoMath.Distance (llb.Northeast.Latitude, llb.Northeast.Longitude, llb.Southwest.Latitude, llb.Southwest.Longitude, GeoMath.MeasureUnits.Kilometers);
- var radius = GeoMath.KmToDegrees (visibleRadius);
- var lat = cameraPos.Target.Latitude;
- var lng = cameraPos.Target.Longitude;
- var markers = await PoiService.Instance.SearchAsync (null, lat, lng, radius);
- this.pois.Clear();
- this.pois.AddRange(markers);
- try { UpdatePois(); } catch { }
- }
- void UpdatePois()
- {
- this.Activity.RunOnUiThread(() => map.Clear());
- currentMarkerInfos.Clear();
- Console.WriteLine("POIS MAP VIEW: " + pois.Count());
- foreach (var p in pois)
- {
- var mo = new MarkerOptions();
- mo.SetPosition(new LatLng(p.Latitude, p.Longitude));
- mo.SetTitle(p.Name);
- mo.SetSnippet(p.Category);
- this.Activity.RunOnUiThread(() =>
- {
- var addedMarker = map.AddMarker(mo);
- if (addedMarker == null)
- Console.WriteLine("Added Marker is null");
- else
- currentMarkerInfos.Add(addedMarker.Id, p);
- });
- }
- }
- public void MoveCamera(double latitude, double longitude)
- {
- firstLoadWithLocation = false;
- var cu = CameraUpdateFactory.NewCameraPosition(new CameraPosition(new LatLng(latitude, longitude), 16, 0, 0));
- map.AnimateCamera(cu, 1, null);
- }
- public override void OnResume()
- {
- Common.Log.Debug("MapFragment->OnResume");
- mapView.OnResume();
- base.OnResume();
- map.MyLocationEnabled = true;
- UpdatePois();
- }
- public override void OnDestroy()
- {
- Common.Log.Debug("MapFragment->OnDestroy");
- mapView.OnDestroy();
- base.OnDestroy();
- }
- public override void OnLowMemory()
- {
- mapView.OnLowMemory();
- base.OnLowMemory();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement