Hola!

Hoy sigo con el ejemplo de los mapas y Surface Dial. En el caso de hoy, agregare una nueva funcionalidad a la aplicación con el mapa

  • Utilizar el spin de Surface Dial para controlar el zoom del mapa
  • Utilizar el spin de Surface Dial para rotar la vista actual en el mapa
  • Deshabilitar el spin de Surface Dial

En este caso he creado 3 elementos de menú diferentes que se pueden seleccionar utilizando el clic del Surface Dial.

I1

Cada uno de estos elementos se agrega a la colección de ítems que tiene asociada esta vista en el Surface Dial. El siguiente paso es suscribirse al evento Invoked() de cada elemento del menu para cambar el modo de trabajo de la vista. El código que implementa esta funcionalidad es el siguiente


enum ControllerMode { Zoom, Rotate, Disable };
ControllerMode _controllerMode;
public MapPagePage()
{
_locationService = new LocationService();
Center = new Geopoint(_defaultPosition);
ZoomLevel = DefaultZoomLevel;
InitializeComponent();
var controller = RadialController.CreateForCurrentView();
controller.RotationResolutionInDegrees = 0.2;
controller.UseAutomaticHapticFeedback = false;
var mapZoomItem = RadialControllerMenuItem.CreateFromFontGlyph("El Bruno – Maps Zoom", "\xE128", "Segoe MDL2 Assets");
var mapRotationItem = RadialControllerMenuItem.CreateFromFontGlyph("El Bruno – Map Rotation", "\xE128", "Segoe MDL2 Assets");
var disableDialItem = RadialControllerMenuItem.CreateFromFontGlyph("El Bruno – Disable Dial", "\xE128", "Segoe MDL2 Assets");
controller.Menu.Items.Add(mapZoomItem);
controller.Menu.Items.Add(mapRotationItem);
controller.Menu.Items.Add(disableDialItem);
mapZoomItem.Invoked += MapZoomItem_Invoked;
mapRotationItem.Invoked += MapRotationItem_Invoked;
disableDialItem.Invoked += DisableDialItem_Invoked;
controller.RotationChanged += ControllerRotationChangedAsync;
}
private void DisableDialItem_Invoked(RadialControllerMenuItem sender, object args)
{
_controllerMode = ControllerMode.Disable;
}
private void MapRotationItem_Invoked(RadialControllerMenuItem sender, object args)
{
_controllerMode = ControllerMode.Rotate;
}
private void MapZoomItem_Invoked(RadialControllerMenuItem sender, object args)
{
_controllerMode = ControllerMode.Zoom;
}
private async void ControllerRotationChangedAsync(RadialController sender, RadialControllerRotationChangedEventArgs args)
{
Debug.WriteLine($"{args.RotationDeltaInDegrees}");
switch (_controllerMode)
{
case ControllerMode.Zoom:
mapControl.ZoomLevel = mapControl.ZoomLevel + args.RotationDeltaInDegrees;
break;
case ControllerMode.Rotate:
await mapControl.TryRotateAsync(args.RotationDeltaInDegrees);
break;
default:
Debug.WriteLine($"No action!");
break;
}
}

Happy Coding!

Source Code en GitHub

Saludos @ Toronto

El Bruno

References

Leave a comment

Discover more from El Bruno

Subscribe now to keep reading and get access to the full archive.

Continue reading