C# 如何在Xamarin.Forms中单击按钮时从地图中删除多段线
我正在使用C# 如何在Xamarin.Forms中单击按钮时从地图中删除多段线,c#,xamarin.android,xamarin.forms,C#,Xamarin.android,Xamarin.forms,我正在使用CustomMapRenderer.cs和ExtendedMap.cs在地图上通过点击(触摸事件)绘制多段线 ExtendedMap.cs位于Visual Studio 2015解决方案的MapTap(Portable)项目中,而CustomMapRenderer.cs位于MapTap.Android项目中 CustomMapRenderer.cs ClearPolyLine是一个接口,在custommapreder 问题是,当我调用上述代码行时,变量test本身不是null,但它的所
CustomMapRenderer.cs
和ExtendedMap.cs
在地图上通过点击(触摸事件)绘制多段线
ExtendedMap.cs
位于Visual Studio 2015解决方案的MapTap(Portable)
项目中,而CustomMapRenderer.cs
位于MapTap.Android
项目中
CustomMapRenderer.cs
ClearPolyLine
是一个接口,在custommapreder
问题是,当我调用上述代码行时,变量test
本身不是null
,但它的所有成员变量(在CustomMapRenderer
中实现)都是null<代码>测试
的类型为ClearPolyline
如何解决此问题?PolyLine addedLine=map.AddPolyline(polygonOptions)代码> 这将返回添加的多段线,以便将此多段线存储在属性或集合中。 在ExtendedMap的按钮上单击或命令扰动
RemovePolyline属性
(自定义可绑定属性),并根据值调用addedLine.remove(),侦听扩展渲染器中的属性更改在多段线集合中编码>或循环,并将其删除
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);
}
}
}
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; }
}
}
var test = DependencyService.Get<ClearPolyline>();
test.Clearline();