- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我将 Xamarin.Forms 和 Xamarin.Forms.Maps 更新到新版本 (2.3.4) 后出现问题。
之后我还更新了 Android 项目中的所有 google play 服务(以及许多我讨厌的库)。
主要问题是我有一个用于自定义图钉的自定义 MapRenderer,在 iOS 和 UWP 中工作正常,但在 Android 版本中,这个自定义 MapRenderer 破坏了所有 map 。似乎忽略了任何属性更改或方法调用。
例如,我有一个用于切换 map 类型(混合或街道)的按钮,并且该操作永远不会改变它。我还注意到(根据本教程:https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/custom-renderer/map/customized-pin/)属性“VisibleRegion”永远不会改变,所以下面的代码永远不会执行:
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(sender, e);
if (e.PropertyName.Equals("VisibleRegion") && !_isDrawn)
{
// Do something with your custom map
}
}
在那个 if
中,我曾经填充我的自定义图钉(如上面的教程),现在我的 map 总是空的。
现在我在 IOnMapReadyCallback
中填充我的 map ,它工作正常,但我仍然有绑定(bind)问题。
如果我忽略自定义 MapRendered(删除流水线),所有绑定(bind)都会开始正常工作,但我的 map 现在有旧图钉并且所有自定义都消失了(很明显)。
在 PCL 中,我有 MyMap.MoveToRegion(...)
和 MyMap.MapType = _currentType;
之类的东西,但这些说明仅在不使用时才有效自定义 MapRenderer。
我自定义的MapRenderer和上面的教程差不多。
自定义 map 是使用 C# 而不是 XAML 创建的,它没有任何 XAML 绑定(bind),但如果我使用 MapRenderer,则完全忽略任何属性更改或方法调用(如 MoveToRegion 或 MapType)。
有什么帮助吗?
谢谢
最佳答案
我已经找到了解决方案。
查看源代码,MapRenderer 已经实现了 IOnMapReadyCallback
,如果您删除自定义 MapRendered 中的实现,一切都会重新开始(但没有自定义)。
MapRenderer 将 google map 实例保存在属性 NativeMap
中(也存在 Map
属性,即 Xamarin forms map 实例)所以我们不需要实现 IOnMapReadyCallback
了。我认为我们在使用 NativeMap
时需要小心,因为一开始它可能是 null
。
在我之前提到的方法中,我现在这样做:
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(sender, e);
if (e.PropertyName.Equals("VisibleRegion") && !_isDrawn)
{
PopulateMap();
OnGoogleMapReady();
}
}
我在 OnMapReady 中的代码现在进入了 OnGoogleMapReady()
:
private void OnGoogleMapReady()
{
if (_mapReady) return;
NativeMap.InfoWindowClick += OnInfoWindowClick;
NativeMap.SetInfoWindowAdapter(this);
_mapReady = true;
}
我还在 OnElementChanged
中添加了这个以删除 NativeMap
中的任何注册委托(delegate)
if (e.OldElement != null)
{
NativeMap.InfoWindowClick -= OnInfoWindowClick;
}
目前存在一个Pull Request将 OnMapReady 实现为虚拟方法,因此我们可以在我们的实现中覆盖它,现在可以确定 NativeMap 何时不为空,但为此我们需要等待下一个版本。
您可以在此处阅读更多信息 -> https://forums.xamarin.com/discussion/92565/android-ionmapreadycallback-forms-2-3-4
关于c# - Xamarin.Forms.Maps 2.3.4 自定义 MapRenderer 禁用一切,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43374960/
我正在尝试使用 Proguard 创建我的 android 项目的发布 apk。当我尝试生成签名的 apk 时收到以下警告: 我正在使用 Skobbler SDK 2.5.1 和 Android SD
我将 Xamarin.Forms 和 Xamarin.Forms.Maps 更新到新版本 (2.3.4) 后出现问题。 之后我还更新了 Android 项目中的所有 google play 服务(以及
我在我的 Xamarin 表单应用程序中实现了 Google map ,但在 map 完成加载当前位置之前离开页面时出现上述异常。 这可能与之前提出但未得到解答的问题相同 here . 根据我的研究,
我是一名优秀的程序员,十分优秀!