首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >最新版本的Xmarin.Forms.Maps breaks自定义渲染器

最新版本的Xmarin.Forms.Maps breaks自定义渲染器
EN

Stack Overflow用户
提问于 2016-12-27 07:52:18
回答 0查看 427关注 0票数 0

尝试使用自定义渲染器在地图上显示圆。(Android)

将Xamarin.Forms.Maps更新到v2.3.3.175,现在我收到错误: CustomMapRenderer.OnElementChanged(ElementChangedEventArgs)':找不到合适的方法来覆盖。

以前工作时没有任何问题。甚至下面链接中的示例也不再有效。https://developer.xamarin.com/recipes/cross-platform/xamarin-forms/maps/map-overlay/circle/

ElementChangedEventArgs<View>更改为ElementChangedEventArgs<Map>可以解决错误,但从不调用渲染器,因此从不显示圆。

有什么想法吗?提前谢谢。

我的自定义Android渲染器:

代码语言:javascript
运行
AI代码解释
复制
using Android.Gms.Maps;
using Android.Gms.Maps.Model;
using Xamarin.Forms;
using Xamarin.Forms.Maps.Android;
using GasFinder;
using MapOverlay.Droid;

[assembly: ExportRenderer(typeof(CustomMap),typeof(CustomMapRenderer))]
namespace MapOverlay.Droid {
    public class CustomMapRenderer:MapRenderer, IOnMapReadyCallback {
    GoogleMap map;
    CustomCircle circle;

    protected override void OnElementChanged(Xamarin.Forms.Platform.Android.ElementChangedEventArgs<View> e) {
        base.OnElementChanged(e);

        if(e.OldElement != null) {
            // Unsubscribe
        }

        if(e.NewElement != null) {
            var formsMap = (CustomMap)e.NewElement;
            circle = formsMap.Circle;
            ((MapView)Control).GetMapAsync(this);
        }
    }
    public void OnMapReady(GoogleMap googleMap) {
        map = googleMap;

        var circleOptions = new CircleOptions();
        circleOptions.InvokeCenter(new LatLng(circle.Position.Latitude,circle.Position.Longitude));
        circleOptions.InvokeRadius(circle.Radius);
        circleOptions.InvokeFillColor(0X233273b1);
        circleOptions.InvokeStrokeColor(0X64007eff);
        circleOptions.InvokeStrokeWidth(10);
        map.AddCircle(circleOptions);
    }
}
}

CustomMap.cs格式如下:

代码语言:javascript
运行
AI代码解释
复制
using System.Collections.Generic;
using Xamarin.Forms.Maps;

namespace GasFinder {
    public class CustomMap:Map {
        public CustomCircle Circle { get; set; }
    }
}

CustomCircle.cs格式如下:

代码语言:javascript
运行
AI代码解释
复制
using Xamarin.Forms.Maps;

namespace GasFinder {
    public class CustomCircle {
        public Position Position { get; set; }
        public double Radius { get; set; }
    }
}

我的Page.xaml.cs上的代码如下:

代码语言:javascript
运行
AI代码解释
复制
var position = new Xamarin.Forms.Maps.Position(Search.loc.lat,Search.loc.lng);
customMap.Circle = new CustomCircle {
    Position = position,
    Radius = Settings.Distance*1000
};
EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41341197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文