【问题标题】:Xamarin.forms - How do I create draggable elements (Markers) on a MapView?Xamarin.forms - 如何在 MapView 上创建可拖动元素(标记)?
【发布时间】:2018-04-01 04:55:46
【问题描述】:

我是 Xamarin 的新手,来自 Android 和 Swift 开发。我只是好奇在调查如何做到这一点时,什么是一个好的方法或方向?它与 Xamarin.Form.Map 一起出现,它只允许我使用引脚。

但在 Android Google Maps API 上,我有 MarkerDrag 监听器接口,在 Swift 中,我可以使标记可拖动。如何为 Xamarin.Forms 地图视图设置地图侦听器?拜托,不要太详细,只是从哪里开始的想法。

任何帮助将不胜感激!

谢谢!

-T

【问题讨论】:

    标签: c# android ios mobile xamarin.forms


    【解决方案1】:

    但在 Android Google Maps API 上,我有 MarkerDrag 侦听器接口,在 Swift 中,我可以使标记可拖动。如何为 Xamarin.Forms 地图视图设置地图侦听器?拜托,不要太详细,只是从哪里开始的想法。

    对于Xamarin.Forms,如果您想访问Xamarin.Forms 不具备的某些本机功能,则需要Custom Renderer。也适用于地图:

    1. 在 PCL 中为地图创建自定义空控件:

      public class CustomMap:Map
      {}
      
    2. 在您的 xaml 页面中使用它:

      <StackLayout>
          <local:CustomMap WidthRequest="320" HeightRequest="200"
              x:Name="MyMap"
              IsShowingUser="true"
              MapType="Hybrid" />
      </StackLayout>
      
    3. 为它创建一个自定义的Renderer(下面只是一个如何在Android中设置MarkerDrag事件的例子。):

      [assembly:ExportRenderer(typeof(MapsDemo.CustomMap),
          typeof(MarkerClusterRenderer))]
      namespace MapsDemo.Droid
      {
          public class MarkerClusterRenderer:MapRenderer,IOnMapReadyCallback
          {
              public MarkerClusterRenderer(Context c) : base(c)
              {
      
              }
      
              protected override void OnMapReady(GoogleMap map)
              {
                  base.OnMapReady(map);
                  var markerOptions = new Android.Gms.Maps.Model.MarkerOptions();
                  markerOptions.SetTitle("Winffeeeeeeeeeee");
                  markerOptions.SetPosition(new Android.Gms.Maps.Model.LatLng(37.051060, -122.014684));
                  markerOptions.Draggable(true);
                  map.AddMarker(markerOptions);
      
                  map.MarkerDrag += Map_MarkerDrag;
              }
      
              private void Map_MarkerDrag(object sender, GoogleMap.MarkerDragEventArgs e)
              {
                  //implement your marker drag event here
              }
      
              protected override void OnElementChanged(ElementChangedEventArgs<Map> e)
              {
                  base.OnElementChanged(e);
      
                  Control.GetMapAsync(this);
              }
      
          }
      }
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-16
      • 1970-01-01
      • 2021-11-15
      • 2013-09-18
      • 1970-01-01
      • 2013-06-06
      • 2022-11-10
      相关资源
      最近更新 更多