gpt4 book ai didi

c# - 如何在 Xamarin.Forms 中单击按钮时从 map 中删除多段线

转载 作者:太空宇宙 更新时间:2023-11-03 15:06:35 26 4
gpt4 key购买 nike

我正在使用 CustomMapRenderer.csExtendedMap.cs 通过点击(触摸事件)在 map 上绘制 polylines

ExtendedMap.cs 位于 MapTap (Portable) 项目中,而 CustomMapRenderer.cs 位于 MapTap.Android 项目。

CustomMapRenderer.cs

using System.Collections.Generic;
using Android.Gms.Maps;
using Android.Gms.Maps.Model;
using MapTap;
using MapTap.Droid;
using Xamarin.Forms;
using Xamarin.Forms.Maps;
using Xamarin.Forms.Maps.Android;
using System;

[assembly: ExportRenderer(typeof(ExtendedMap), typeof(CustomMapRenderer))]
[assembly: Dependency(typeof(CustomMapRenderer))]

namespace MapTap.Droid
{
public class CustomMapRenderer : MapRenderer, IOnMapReadyCallback,ClearPolyline
{
GoogleMap map;
List<LatLng> polygontest = new List<LatLng>();

public CustomMapRenderer()
{
}

protected override void OnElementChanged(Xamarin.Forms.Platform.Android.ElementChangedEventArgs<Map> e)
{
if (map != null)
map.MapClick -= googleMap_MapClick;
base.OnElementChanged(e);
if (Control != null)
((MapView)Control).GetMapAsync(this);
}

public void OnMapReady(GoogleMap googleMap)
{
map = googleMap;
if (map != null)
map.MapClick += googleMap_MapClick; ;
}

private void googleMap_MapClick(object sender, GoogleMap.MapClickEventArgs e)
{
polygontest.Add(new LatLng(e.Point.Latitude, e.Point.Longitude));
((ExtendedMap)Element).OnTap(new Position(e.Point.Latitude, e.Point.Longitude));

if (polygontest.Count >1 )
{
AddPolygons();
}
}
public void Clearline()
{
map.Clear();
}

void AddPolygons()
{
var polygonOptions = new PolylineOptions();

polygonOptions.InvokeColor(0x66FF0000);

foreach (var position in polygontest)
{
polygonOptions.Add(new LatLng(position.Latitude, position.Longitude));
}

map.AddPolyline(polygonOptions);
polygontest.RemoveAt(0);
}
}
}

扩展 map .cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms.Maps;
using Xamarin.Forms.Maps.Android;
using Android.Gms.Maps;
using Android.Gms.Maps.Model;
using Xamarin.Forms;

namespace MapTap
{
public class ExtendedMap : Map
{
public event EventHandler<TapEventArgs> Tap;
public ExtendedMap()
{
}

public ExtendedMap(MapSpan region) : base(region)
{
}

public void OnTap(Position coordinate)
{
OnTap(new TapEventArgs { Position = coordinate });

var lat = coordinate.Latitude;
var lng = coordinate.Longitude;

putpinonclick(lat,lng);
}

public void putpinonclick(double lat, double lng)
{
var pin = new Pin
{
Type = PinType.SavedPin,
Position = new Position(lat, lng),
Label = "Xamarin San Francisco Office",
Address = "394 Pacific Ave, San Francisco CA"
};

this.Pins.Add(pin);
}

protected virtual void OnTap(TapEventArgs e)
{
var handler = Tap;
if (handler != null) handler(this, e);
}
}

public class TapEventArgs : EventArgs
{
public Position Position { get; set; }
}
}

我想在 MainPage.xaml 中单击按钮(清除按钮)时清除多段线。

以下是正在运行的应用程序的屏幕截图: Screenshot

我正在使用 MainPage.Xaml.cs 调用 CustomMapRendrer.cs 的函数

 var test = DependencyService.Get<ClearPolyline>();
test.Clearline();

ClearPolyLine是一个接口(interface),接口(interface)函数中的ClearlineCustomMapRender

中实现

问题是当我调用上面这行代码时,变量test本身并不是null,而是它的所有成员变量(在中实现CustomMapRenderer) 为空。 testClearPolyline 类型。

如何解决这个问题?

最佳答案

折线 addedLine = map.AddPolyline(polygonOptions);这应该返回添加的折线,因此将此折线存储在属性或集合中。单击按钮或命令干扰 ExtendedMap 的 RemovePolyline 属性(自定义可绑定(bind)属性)并监听扩展渲染器中的属性变化并根据值调用 addedLine.remove(); 或在折线集合中循环并将其删除。

关于c# - 如何在 Xamarin.Forms 中单击按钮时从 map 中删除多段线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43202198/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com