Я следую учебному пособию по пользовательскому пину, используя Xamarin.Forms, которые я привел ниже.Я закончил реализацию, и я также перешел на добавление булавок на карту, также нажав.
https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/custom-renderer/map/customized-pin
(примечание: я работаю почти исключительно с Xamarin.Forms и Android)
В настоящее время я могу нажать на карту и новыйТам будет добавлен пользовательский пин-код, и это здорово.Что не очень хорошо, так это то, что я не смог понять, как заставить работать нажатие и долго удерживать жест вместо обычного нажатия.Чтобы попытаться бороться с этим, и потому что мне в конечном итоге придется добавить это в любом случае, я планирую добавить кнопку, которую пользователь может нажать, чтобы инициировать, что он хочет добавить кнопку на карту, и позже я добавлю кнопку отменыи многие другие и т. д.
Проблема в том, что я понятия не имею, как получить результат того, какое состояние моего переключателя находится из пользовательского рендера, который я использую для карты.Где я могу получить результат моей кнопки-переключателя и использовать его как логическое значение для добавления или не добавления кнопки?
Вот код кнопки-переключателя, который я построчно брал из их примера на этой странице:
https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/button
Вот код, в который я добавляю пользовательский штифт одним нажатием:
private void GoogleMap_MapClick(object sender, GoogleMap.MapClickEventArgs e)
{
((CustomMap)Element).OnTap(new Position(e.Point.Latitude, e.Point.Longitude));
var addingPin = new CustomPin
{
Type = PinType.Place,
Position = new Position(e.Point.Latitude, e.Point.Longitude),
Address = " - need to possibly implement - ",
Id = "shelter",
Label = "Pin from tap",
Url = "http://www.redcross.org"
};
Map.Pins.Add(addingPin);
this.customPins.Add(addingPin);
}
Я думал о том, чтобы сделать пользовательскую кнопку рендеринга, нонасколько я знаю, я могу применять только один рендер Android к странице контента за раз, и когда я попытался добавить пользовательский рендеринг кнопки на рендер карты, этот метод был неудовлетворительным, так как он занимал какое-то представление карты Android.а не кнопка просмотра:
protected override void OnElementChanged(Xamarin.Forms.Platform.Android.ElementChangedEventArgs<Map> e)
{
base.OnElementChanged(e);
if (e.OldElement != null)
{
NativeMap.InfoWindowClick -= OnInfoWindowClick;
}
if (e.NewElement != null)
{
var formsMap = (CustomMap)e.NewElement;
customPins = formsMap.CustomPins;
Control.GetMapAsync(this);
}
}
Любая помощь с благодарностью.Ниже я добавил изображение того, как выглядит мое приложение, наряду с пользовательской страницей, которую я также использую.
using Hermes.Models;
using System;
using System.Collections.Generic;
using Xamarin.Forms;
using Xamarin.Forms.Maps;
namespace Hermes
{
public class MapPage : ContentPage
{
public MapPage()
{
CustomMap customMap = new CustomMap()
{
HeightRequest = 100,
WidthRequest = 960,
VerticalOptions = LayoutOptions.FillAndExpand,
MapType = MapType.Street,
};
var examplePinSupplies = new CustomPin
{
Type = PinType.Place,
Position = new Position(42.02525, -93.65087),
Address = " - need to possibly implement - ",
Id = "supplies",
Label = "supplies",
Url = "https://www.redcross.org/store"
};
var examplePinMedical = new CustomPin
{
Type = PinType.Place,
Position = new Position(42.02290, -93.63912),
Address = " - need to possibly implement - ",
Id = "medical",
Label = "medical",
Url = "http://www.redcross.org"
};
var examplePinShelter = new CustomPin
{
Type = PinType.Place,
Position = new Position(42.02045, -93.60968),
Address = " - need to possibly implement - ",
Id = "shelter",
Label = "shelter",
Url = "http://www.redcross.org"
};
customMap.CustomPins = new List<CustomPin> { examplePinSupplies, examplePinMedical, examplePinShelter };
customMap.Pins.Add(examplePinSupplies);
customMap.Pins.Add(examplePinMedical);
customMap.Pins.Add(examplePinShelter);
customMap.MoveToRegion(MapSpan.FromCenterAndRadius(new Position(42.025250, -93.650870), Distance.FromMiles(1.0)));
var addPin = new ToggleButton { Text = "Add pin" };
var buttons = new StackLayout
{
Orientation = StackOrientation.Horizontal,
Children = {
addPin
}
};
Content = new StackLayout
{
Spacing = 0,
Children = {
customMap,
buttons
}
};
}
}
}
Что я пытаюсь сделать: я пытаюсь нажать кнопку переключения «Добавить пин-код», и тогда карта позволитчтобы добавить только один штифт на карту, коснитесь, а затем любые другие последовательные касания, которых нет на другом, не добавят другой штифт на карту.