Xamain.Forms 用户界面——控件——Map
来源:互联网 发布:网络教育培训机构 编辑:程序博客网 时间:2024/05/21 02:51
地图
在Xamarin.Forms中添加地图
- PDF用于离线使用
- 下载PDF
- 示例代码:
- MapsSample
- 相关样品:
- Xamarin.Forms样品
让我们知道你对此的感受
最后更新:2016年4月
Xamarin.Forms在每个平台上使用原生地图API。
Xamarin.Forms.Maps在每个平台上使用原生地图API。这为用户提供了一种快速,熟悉的地图体验,但意味着需要一些配置步骤来遵守每个平台特定的API要求。一旦配置,该Map
控件就像通用代码中的任何其他Xamarin.Forms元素一样工作。
- 地图初始化 -
Map
启动时需要额外的初始化代码。 - 平台配置 - 每个平台需要一些配置才能使地图工作。
- 在C#中使用地图 - 使用C#显示地图和引脚。
- 在XAML中使用地图 - 使用XAML显示地图。
地图控件已在MapsSample示例中使用,如下所示。
通过创建地图自定义渲染器可以进一步增强地图功能。
地图初始化
当将地图添加到Xamarin.Forms应用程序时,Xamarin.Forms.Maps是一个单独的NuGet包,您应该添加到解决方案中的每个项目。在Android上,这也依赖于GooglePlayServices(另一个NuGet),当您添加Xamarin.Forms.Maps时,它会自动下载。
安装NuGet软件包后,Xamarin.Forms.Forms.Init
方法调用后,每个应用程序项目都需要一些初始化代码 。对于iOS使用以下代码:
Xamarin.FormsMaps.Init();
在Android上,您必须传递与以下相同的参数Forms.Init
:
Xamarin.FormsMaps.Init(this, bundle);
对于Windows运行时(WinRT)和通用Windows平台(UWP),使用以下代码:
Xamarin.FormsMaps.Init("INSERT_AUTHENTICATION_TOKEN_HERE");
在以下每个平台的文件中添加此调用:
- iOS - AppDelegate.cs文件,在
FinishedLaunching
方法中。 - Android - MainActivity.cs文件,在
OnCreate
方法中。 - WinRT和UWP - MainPage.xaml.cs文件,在
MainPage
构造函数中。
一旦添加了NuGet软件包,并在每个应用程序中调用了初始化方法,Xamarin.Forms.Maps
就可以在普通PCL或共享项目代码中使用API。
平台配置
在地图显示之前,需要在某些平台上执行其他配置步骤。
iOS版
在iOS 7上,只要打了FormsMaps.Init()
电话,地图控件就“正常工作” 。
对于iOS 8,需要将两个键添加到Info.plist文件中:NSLocationAlwaysUsageDescription
和NSLocationWhenInUseUsageDescription
。XML表示如下所示 - 您应该更新string
值以反映应用程序如何使用位置信息:
<key>NSLocationAlwaysUsageDescription</key> <string>Can we use your location</string><key>NSLocationWhenInUseUsageDescription</key> <string>We are using your location</string>
该Info.plist中的条目也可以添加源视图,而编辑的Info.plist文件:
Android的
要 在Android上使用Google Maps API v2,您必须生成API密钥并将其添加到您的Android项目中。按照Xamarin文档中的说明获取Google Maps API v2密钥。按照这些说明,将API密钥粘贴到 Properties / AndroidManifest.xml文件中(查看源代码并查找/更新以下元素):
<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="AbCdEfGhIjKlMnOpQrStUvWValueGoesHere" />
没有有效的API密钥,地图控件将在Android上显示为灰色框。
您还需要通过右键单击Android项目并选择选项>构建> Android应用程序并勾选以下内容来启用适当的权限 :
AccessCoarseLocation
AccessFineLocation
AccessLocationExtraCommands
AccessMockLocation
AccessNetworkState
AccessWifiState
Internet
其中一些显示如下:
最后两个是必需的,因为应用程序需要网络连接才能下载地图数据。阅读有关Android 权限的 详细信息。
Windows运行时和通用Windows平台
要在Windows运行系统和通用Windows平台上使用地图,您必须生成授权令牌。有关详细信息,请参阅在MSDN上请求映射身份验证密钥。
然后在FormsMaps.Init("AUTHORIZATION_TOKEN")
方法调用中指定身份验证令牌,以便使用Bing Maps验证应用程序。
使用地图
看到MapPage.cs的MobileCRM样品中的如何映射控制可以在代码中使用的示例。一个简单的MapPage
类可能看起来像这样 - 注意MapSpan
创建一个新的定位地图的视图:
public class MapPage : ContentPage { public MapPage() { var map = new Map( MapSpan.FromCenterAndRadius( new Position(37,-122), Distance.FromMiles(0.3))) { IsShowingUser = true, HeightRequest = 100, WidthRequest = 960, VerticalOptions = LayoutOptions.FillAndExpand }; var stack = new StackLayout { Spacing = 0 }; stack.Children.Add(map); Content = stack; }}
地图类型
也可以通过设置MapType
属性来更改地图内容,以显示正常的街道地图(默认),卫星图像或两者的组合。
map.MapType == MapType.Street;
有效MapType
值为:
- 混合动力
- 卫星
- 街(默认)
地图区域和MapSpan
如上面的代码片段所示,向MapSpan
地图构造函数提供实例会在映射加载时设置地图的初始视图(中心点和缩放级别)。的MoveToRegion
在地图类方法然后可以用于改变地图的位置或缩放级别。创建新MapSpan
实例有两种方法:
- MapSpan.FromCenterAndRadius() - 从a创建跨度
Position
并指定a的 静态方法Distance
。 - 新的MapSpan() - 使用
Position
纬度和经度的展开的构造函数 。
要更改地图的缩放级别而不更改位置,请MapSpan
使用VisibleRegion.Center
地图控件的属性中的当前位置创建新的位置。ASlider
可以用于控制这样的地图缩放(但是直接在地图控件中缩放当前无法更新滑块的值):
var slider = new Slider (1, 18, 1);slider.ValueChanged += (sender, e) => { var zoomLevel = e.NewValue; // between 1 and 18 var latlongdegrees = 360 / (Math.Pow(2, zoomLevel)); map.MoveToRegion(new MapSpan (map.VisibleRegion.Center, latlongdegrees, latlongdegrees));};
地图引脚
位置可以在地图上用Pin
对象标记。
var position = new Position(37,-122); // Latitude, Longitudevar pin = new Pin { Type = PinType.Place, Position = position, Label = "custom pin", Address = "custom detail info" };map.Pins.Add(pin);
PinType
可以设置为以下值之一,这可能会影响渲染引脚的方式(取决于平台):
- 通用
- 地点
- SavedPin
- 搜索结果
使用Xaml
地图也可以放置在Xaml布局中,如此片段所示。
<?xml version="1.0" encoding="UTF-8" ?><ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:maps="clr-namespace:Xamarin.Forms.Maps;assembly=Xamarin.Forms.Maps" x:Class="MapDemo.MapPage"> <StackLayout VerticalOptions="StartAndExpand" Padding="30"> <maps:Map WidthRequest="320" HeightRequest="200" x:Name="MyMap" IsShowingUser="true" MapType="Hybrid" /> </StackLayout></ContentPage>
的MapRegion
和Pins
可以在代码使用来设置MyMap
参考(或任何地图被命名)。请注意,需要额外的xmlns
命名空间定义来引用Xamarin.Forms.Maps控件。
MyMap.MoveToRegion( MapSpan.FromCenterAndRadius( new Position(37,-122), Distance.FromMiles(1)));
概要
Xamarin.Forms.Maps是一个单独的NuGet,必须添加到Xamarin.Forms解决方案中的每个项目中。需要附加的初始化代码,以及iOS,Android,WinRT和UWP的一些配置步骤。
一旦配置,Maps API可以用于在几行代码中使用引脚标记渲染地图。使用自定义渲染器可以进一步增强地图。
- Xamain.Forms 用户界面——控件——Map
- Xamarin.Forms 用户界面——控件
- Xamarin.Forms 用户界面——控件——页面
- Xamarin.Forms 用户界面——控件——布局
- Xamarin.Forms 用户界面——控件——View
- Xamarin.Forms 用户界面——控件——Cells
- Xamarin.Forms 用户界面——控件——Images
- Xamarin.Forms 用户界面——控件——Layouts
- Xamarin.Forms 用户界面——控件——ListView
- Xamarin.Forms 用户界面——控件——Picker
- Xamarin.Forms 用户界面——控件——Styles
- Xamarin.Forms 用户界面——控件——TableView
- Xamarin.Forms 用户界面——控件——Text
- Xamarin.Forms 用户界面——控件——WebView
- Xamarin.Forms 用户界面——控件——View
- Xamarin.Forms 用户界面——动画
- Xamarin.Forms 用户界面——颜色
- Xamarin.Forms 用户界面——控件——DataPages——控件参考
- 指针数组,数组指针,函数指针,函数指针数组,指向函数指针数组的指针
- UVA 12168 Cat vs. Dog(二分图匹配+匈牙利算法+最大独立集+数据转化)
- Kibana安装与基本用法(ELK)
- H5移动端常见问题
- 多个基于AIDL的server,Binder驱动怎么区分它们
- Xamain.Forms 用户界面——控件——Map
- TDD (test driver development)测试驱动开发
- bzoj 1497: [NOI2006]最大获利 最小割 最大权闭和子图
- Android一个类似腾讯 QQ 背景图片可以上下左右移动的 imageview
- Apache Kylin权威指南 1.5版本 笔记
- Mysql索引类型
- ubuntu 解决“无法获得锁 /var/lib/dpkg/lock -open (11:资源暂时不可用)”的方法
- weblogic部署war
- HDU