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示例中使用,如下所示。

MobileCRM示例中的地图

通过创建地图自定义渲染器可以进一步增强地图功能。

地图初始化

当将地图添加到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文件中:NSLocationAlwaysUsageDescriptionNSLocationWhenInUseUsageDescription。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文件:

iOS 8的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上显示为灰色框。

请记住使用密钥库 文件生成另一个密钥,该文件用于签署上传到Google Play商店的任何应用程序的发行版本。您为开发和调试生成的关键点将无法正常工作,并且从Google Play下载的应用程序将显示地图显示。如果应用程序的“ 包名称”更改,还要记住重新生成密钥 。

您还需要通过右键单击Android项目并选择选项>构建> Android应用程序并勾选以下内容来启用适当的权限 :

  • AccessCoarseLocation
  • AccessFineLocation
  • AccessLocationExtraCommands
  • AccessMockLocation
  • AccessNetworkState
  • AccessWifiState
  • Internet

其中一些显示如下:

Android所需的权限

最后两个是必需的,因为应用程序需要网络连接才能下载地图数据。阅读有关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>

MapRegionPins可以在代码使用来设置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可以用于在几行代码中使用引脚标记渲染地图。使用自定义渲染器可以进一步增强地图。

阅读全文
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 狗舔了结痂伤口怎么办 狗狗指甲变黑了怎么办 狗狗不肯剪指甲怎么办 厕所门对厨房门怎么办 房间门对着镜子怎么办 门直对着楼梯口怎么办 厨房门对着客厅怎么办 卧室正对着马路怎么办 主卧厕所对着床怎么办 卧室门对着床头怎么办 主卧厕所门对床怎么办 老人晕车怎么办最有效方法 货车油刹不好用怎么办 7岁儿童喉咙有痰怎么办 3岁宝宝喉咙有痰怎么办 冰箱正对厨房门怎么办 买了连廊高层怎么办 想买电玩瑞文怎么办 财位旁边有窗户怎么办 入室门对卧室门怎么办 卧室门对着大门怎么办 床给别人睡过了怎么办 镜子对着书房门怎么办 次卧对着卫生间怎么办 一楼房间太潮湿怎么办 房间里潮湿很重怎么办 儿童眼屎多又黄怎么办 地铁旁房子很吵怎么办 租的房子隔音差怎么办 花园洋房买了2楼怎么办 路由器wan口坏了怎么办 卧室有横梁压床怎么办 买了13层的房子怎么办 买了运费险换货怎么办 运费险一直没退怎么办 属相与日子相冲怎么办 人身上阴气太重怎么办 商标被异议了该怎么办 种植的眉毛很乱怎么办 眉中间有八字纹怎么办 眉毛离眼睛太远怎么办