【Android】3.9 覆盖物功能
分类:C#、Android、VS2015、百度地图应用; 创建日期:2016-02-04
一、简介
百度地图SDK所提供的地图等级为3-19级(3.7.1版本中有些部分已经提供到了21级),所包含的信息有建筑物、道路、河流、学校、公园等内容。百度将所有叠加或覆盖到地图的内容统称为地图覆盖物。如标注、矢量图形元素(包括:折线、多边形和圆等)、定位图标等。覆盖物拥有自己的地理坐标,当拖动或缩放地图时,它们会相应的移动。
百度地图SDK 3.7.1支持多种地图覆盖物。该版本所支持的地图覆盖物有:定位图层、地图标注(Marker)、几何图形(点、折线、弧线、多边形等)、地形图图层、POI检索结果覆盖物、线路规划结果覆盖物、热力图图层、瓦片图层以及自定义标注等。
1、标注覆盖物
(1)标注
开发者可根据自己实际的业务需求,利用标注覆盖物,在地图指定的位置上添加标注信息。
(2)底图标注
自v3.6.0版本起,SDK在BaiduMap提供了控制底图标注的ShowMapPoi方法,默认显示底图标注。利用此方法可得到仅显示道路信息的地图。
2、几何图形覆盖物
地图SDK提供多种结合图形覆盖物,利用这些图形,可帮助您构建更加丰富多彩的地图应用。目前提供的几何图形有:点(Dot)、折线(Polyline)、弧线(Arc)、圆(Circle)、多边形(Polygon)。
3、文字覆盖物
文字,在地图中也是一种覆盖物,开发者可利用相关的接口,快速实现在地图上书写文字的需求。
4、弹出窗覆盖物
利用弹出窗覆盖物可构建具有更强交互性的地图页面。
5、地形图图层
地形图图层(GroundOverlay),又可叫做图片图层,即开发者可在地图的指定位置上添加图片。该图片可随地图的平移、缩放、旋转等操作做相应的变换。该图层是一种特殊的Overlay, 它位于底图和底图标注层之间(即该图层不会遮挡地图标注信息)。
6、检索结果覆盖物
针对检索功能模块(POI检索、线路规划等),地图SDK还对外提供相应的覆盖物来快速展示结果信息。这些方法都是开源的,开发者可根据自己的实际去求来做个性化的定制。
二、运行截图
简介:介绍添加覆盖物并响应点击功能和弹出pop功能
详述:
(1)在popup中添加弹出自定义View的示例;
(2)点击周围4个Marker,弹出popup,可更新marker位置和更新marker图标;
(3)中间显示的为图片图层,该图层可随地图的移动、缩放等做出相应的操作;
(4)支持Maker设置透明度的方法,利用滑动条可以展示maker透明度变化;
(5)支持Marker设置动画的能力,包含两种方式:从地上生长和从天上落下。
本示例运行截图如下:
三、设计步骤
1、添加demo09_overlay.xml文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" > <LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" > <Button
android:id="@+id/clear"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginBottom="2dip"
android:layout_marginLeft="2dip"
android:layout_marginRight="2dip"
android:layout_marginTop="2dip"
android:layout_weight="1"
android:padding="10dip"
android:text="清除(clear)" /> <Button
android:id="@+id/resert"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginBottom="2dip"
android:layout_marginLeft="2dip"
android:layout_marginRight="2dip"
android:layout_marginTop="2dip"
android:layout_weight="1"
android:text="重置(reset)" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" > <SeekBar
android:id="@+id/alphaBar"
android:layout_marginBottom="2dip"
android:layout_marginLeft="2dip"
android:layout_marginRight="2dip"
android:layout_marginTop="2dip"
android:layout_weight="1"
android:layout_width="155dp"
android:max="10"
android:progress="10"
android:layout_height="wrap_content" /> <CheckBox
android:id="@+id/animation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="2dip"
android:layout_marginLeft="2dip"
android:layout_marginRight="2dip"
android:layout_marginTop="2dip"
android:layout_weight="1"
android:checked="true"
android:text="Marker添加动画" />
</LinearLayout> <com.baidu.mapapi.map.TextureMapView
android:id="@+id/bmapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent" /> </LinearLayout>
2、添加Demo09Overlay.cs文件
在SrcSdkDemos文件夹下添加该文件,然后将其内容改为下面的代码:
using Android.App;
using Android.Content.PM;
using Android.Graphics;
using Android.OS;
using Android.Widget;
using Com.Baidu.Mapapi.Map;
using Com.Baidu.Mapapi.Model;
using System.Collections.Generic; namespace BdMapV371Demos.SrcSdkDemos
{
/// <summary>
/// 演示覆盖物的用法
/// </summary>
[Activity(Label = "@string/demo_name_overlay",
ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.KeyboardHidden,
ScreenOrientation = ScreenOrientation.Sensor)]
public class Demo09Overlay : Activity
{
private TextureMapView mMapView;
private BaiduMap mBaiduMap;
private Marker mMarkerA;
private Marker mMarkerB;
private Marker mMarkerC;
private Marker mMarkerD;
private CheckBox animationBox = null; // 初始化全局 bitmap 信息,不用时及时 Recycle
BitmapDescriptor bdA = BitmapDescriptorFactory.FromResource(Resource.Drawable.icon_marka);
BitmapDescriptor bdB = BitmapDescriptorFactory.FromResource(Resource.Drawable.icon_markb);
BitmapDescriptor bdC = BitmapDescriptorFactory.FromResource(Resource.Drawable.icon_markc);
BitmapDescriptor bdD = BitmapDescriptorFactory.FromResource(Resource.Drawable.icon_markd);
BitmapDescriptor bd = BitmapDescriptorFactory.FromResource(Resource.Drawable.icon_gcoding);
BitmapDescriptor bdGround = BitmapDescriptorFactory.FromResource(Resource.Drawable.ground_overlay); protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.demo09_overlay); var clear = FindViewById<Button>(Resource.Id.clear);
clear.Click += delegate
{
ClearOverlay();
}; var resert = FindViewById<Button>(Resource.Id.resert);
resert.Click += delegate
{
ClearOverlay();
InitOverlay();
}; var alphaSeekBar = FindViewById<SeekBar>(Resource.Id.alphaBar);
alphaSeekBar.ProgressChanged += (s, e) =>
{
float alpha = e.Progress / 10.0f;
if (mMarkerA != null) mMarkerA.Alpha = alpha;
if (mMarkerB != null) mMarkerB.Alpha = alpha;
if (mMarkerC != null) mMarkerC.Alpha = alpha;
if (mMarkerD != null) mMarkerD.Alpha = alpha;
}; animationBox = FindViewById<CheckBox>(Resource.Id.animation);
mMapView = FindViewById<TextureMapView>(Resource.Id.bmapView);
mBaiduMap = mMapView.Map;
mBaiduMap.SetMapStatus(MapStatusUpdateFactory.ZoomTo(14.0f));
InitOverlay();
mBaiduMap.MarkerClick += (sender, args) =>
{
Marker marker = args.P0;
Button button = new Button(ApplicationContext);
button.SetTextColor(Color.Black);
button.SetBackgroundResource(Resource.Drawable.popup);
if (marker == mMarkerA || marker == mMarkerD)
{
button.Text = "更改位置";
button.Click += (s, e) =>
{
LatLng latLng = args.P0.Position;
LatLng latLngNew = new LatLng(latLng.Latitude + 0.005,
latLng.Longitude + 0.005);
mBaiduMap.HideInfoWindow();
};
var mInfoWindow = new InfoWindow(button, marker.Position, -);
mBaiduMap.ShowInfoWindow(mInfoWindow);
}
else if (marker == mMarkerB)
{
button.Text = "更改图标";
button.Click += delegate
{
marker.Icon = bd;
mBaiduMap.HideInfoWindow();
};
var mInfoWindow = new InfoWindow(button, marker.Position, -);
mBaiduMap.ShowInfoWindow(mInfoWindow);
}
else if (marker == mMarkerC)
{
button.Text = "删除";
button.Click += delegate
{
marker.Remove();
mBaiduMap.HideInfoWindow();
};
var mInfoWindow = new InfoWindow(button, marker.Position, -);
mBaiduMap.ShowInfoWindow(mInfoWindow);
}
};
} public void InitOverlay()
{
// add marker overlay
LatLng latLngA = new LatLng(39.963175, 116.400244);
LatLng latLngB = new LatLng(39.942821, 116.369199);
LatLng latLngC = new LatLng(39.939723, 116.425541);
LatLng latLngD = new LatLng(39.906965, 116.401394); OverlayOptions ooA = new MarkerOptions()
.InvokePosition(latLngA)
.InvokeIcon(bdA)
.InvokeZIndex()
.Draggable(true);
if (animationBox.Checked)
{
//掉下动画
((MarkerOptions)ooA).InvokeAnimateType(MarkerOptions.MarkerAnimateType.Drop);
}
mMarkerA = (Marker)(mBaiduMap.AddOverlay(ooA)); OverlayOptions ooB = new MarkerOptions()
.InvokePosition(latLngB)
.InvokeIcon(bdB)
.InvokeZIndex();
if (animationBox.Checked)
{
//掉下动画
((MarkerOptions)ooB).InvokeAnimateType(MarkerOptions.MarkerAnimateType.Drop);
}
mMarkerB = (Marker)(mBaiduMap.AddOverlay(ooB)); OverlayOptions ooC = new MarkerOptions()
.InvokePosition(latLngC)
.InvokeIcon(bdC)
.Perspective(false)
.Anchor(0.5f, 0.5f)
.InvokeRotate()
.InvokeZIndex();
if (animationBox.Checked)
{
//生长动画
((MarkerOptions)ooC).InvokeAnimateType(MarkerOptions.MarkerAnimateType.Grow);
}
mMarkerC = (Marker)(mBaiduMap.AddOverlay(ooC)); IList<BitmapDescriptor> giflist = new List<BitmapDescriptor>();
giflist.Add(bdA);
giflist.Add(bdB);
giflist.Add(bdC);
OverlayOptions ooD = new MarkerOptions()
.InvokePosition(latLngD)
.InvokeIcons(giflist)
.InvokeZIndex()
.InvokePeriod();
if (animationBox.Checked)
{
//生长动画
((MarkerOptions)ooD).InvokeAnimateType(MarkerOptions.MarkerAnimateType.Grow);
}
mMarkerD = (Marker)(mBaiduMap.AddOverlay(ooD)); // add ground overlay
LatLng southwest = new LatLng(39.92235, 116.380338);
LatLng northeast = new LatLng(39.947246, 116.414977);
LatLngBounds bounds = new LatLngBounds.Builder()
.Include(northeast)
.Include(southwest).Build();
OverlayOptions ooGround = new GroundOverlayOptions()
.PositionFromBounds(bounds)
.InvokeImage(bdGround)
.InvokeTransparency(0.8f);
mBaiduMap.AddOverlay(ooGround); MapStatusUpdate u = MapStatusUpdateFactory.NewLatLng(bounds.Center);
mBaiduMap.SetMapStatus(u);
mBaiduMap.MarkerDrag += (s, e) => { };
mBaiduMap.MarkerDragStart += (s, e) => { };
mBaiduMap.MarkerDragEnd += (s, e) =>
{
Marker marker = e.P0;
Toast.MakeText(this,
"拖拽结束,新位置:"
+ marker.Position.Latitude + ", "
+ marker.Position.Longitude,
ToastLength.Long).Show();
};
} /// <summary>
/// 清除所有Overlay
/// </summary>
public void ClearOverlay()
{
mBaiduMap.Clear();
mMarkerA = null;
mMarkerB = null;
mMarkerC = null;
mMarkerD = null;
} protected override void OnPause()
{
mMapView.OnPause();
base.OnPause();
} protected override void OnResume()
{
mMapView.OnResume();
base.OnResume();
} protected override void OnDestroy()
{
mMapView.OnDestroy();
base.OnDestroy();
// 回收 bitmap 资源
bdA.Recycle();
bdB.Recycle();
bdC.Recycle();
bdD.Recycle();
bd.Recycle();
bdGround.Recycle();
}
}
}
3、修改MainActivity.cs
在MainActivity.cs文件的demos字段定义中,去掉【示例9】下面的注释。
运行观察结果。
【Android】3.9 覆盖物功能的更多相关文章
- Android Webview实现文件下载功能
在做美图欣赏Android应用的时候,其中有涉及到Android应用下载的功能,这个应用本身其实也比较简单,就是通过WebView控制调用相应的WEB页面进行展示.刚开始以为和普通的文件下载实 ...
- I.MX6 android 移除shutdown功能
/************************************************************************ * I.MX6 android 移除shutdown ...
- 你真的有必要退出吗——再说Android程序的退出功能
转自你真的有必要退出吗--再说Android程序的退出功能 搞Android开发有一段时间了,相信很多从Windows开发过来的Android程序员都习惯性地会跟我一样遇到过同一个问题:如何彻底退出程 ...
- 调用Android自带日历功能(日历列表单、添加一个日历事件)
调用Android自带日历功能 觉得这篇文章不错,转载过来. 转载:http://blog.csdn.net/djy1992/article/details/9948393 Android手机配备有 ...
- Android使得手机拍照功能的发展(源共享)
Android系统调用手机拍照功能有两种方法来直接调用手机自带摄像头还有一个就是要当心自己的节拍. 例Camera360 强大的一个在每个操作系统都有一个手机摄影软件:您可以捕捉不同风格,不同特效的照 ...
- Android实现自动更新功能
Android实现自动更新功能 Android自动更新的功能可以使用第三方的SDK来实现,但是类似友盟,就不支持x86手机的自动更新,科大讯飞,弹窗是全局的,小米手机就会默认把弹窗权限关掉不允许弹出提 ...
- Android Camera2 预览功能实现
1. 概述 最近在做一些关于人脸识别的项目,需要用到 Android 相机的预览功能.网上查阅相关资料后,发现 Android 5.0 及以后的版本中,原有的 Camera API 已经被 Camer ...
- [转]Android 代码自动提示功能
源地址http://blog.sina.com.cn/s/blog_7dbac12501019mbh.html 或者http://blog.csdn.net/longvslove/article/de ...
- Android 代码自动提示功能
Eclipse for android 实现代码自动提示智能提示功能,介绍 Eclipse for android 编辑器中实现两种主要文件 java 与 xml 代码自动提示功能,解决 eclips ...
- Android Toast的多功能封装——Android开发之路1
Android封装实现各种功能的Toast GitHub地址:https://github.com/SibreiaDante/ToastUtils 效果图: 方法封装如下: showSingleton ...
随机推荐
- 运行top时,会报unknown terminal type错误
问题: 在板子上执行top时总是提示'vt102': unknown terminal type. 执行了export TERM=xterm,还是不管用 解决: 执行export,方向没有设置TERM ...
- git多仓库管理
使用git建立多仓库管理 以下操作为命令行下操作 一:先创建服务器端口,总仓库和子仓库: ssh git@192.168.1.110 连接git服务器 输入密码 mkdir iOSPro ...
- 关于gcc、glibc和binutils模块之间的关系,以及在现有系统上如何升级的总结
http://blog.csai.cn/user1/265/archives/2005/2465.html 一.关于gcc.glibc和binutils模块之间的关系 1.gcc(gnu collec ...
- vue 常见报错问题
情况一:http://eslint.org/docs/rules/no-tabs Unexpected tab character 解决方案:缩进是4个空格,而不是tab,设置indent 情况二 ...
- google打不开解决的方法
14.5.27以来.谷歌又打不开了. 从网上找了些国内的googleserverIP,例如以下: const char* g_google_ips[18] = { "203.208.48.1 ...
- urlparse模块(专门用来解析URL格式)
# -*- coding: utf-8 -*- #python 27 #xiaodeng #urlparse模块(专门用来解析URL格式) #URL格式: #protocol ://hostname[ ...
- Windwos在cmd如何复制文本
生活的琐事,总是要解决. 01.Win+R打开运行窗口 cmd--回车 02. 勾选快速编辑模式 注意: 快速编辑模式就是可以Ctrl+c(复制).Ctrl+v(粘贴)
- 戴尔大力宣传Ubuntu 对比与Windows的差异
2010-06-18 10:58:36 11175 人阅读 作者:萧萧 编辑:萧萧[爆料] 评论(46) 戴尔近日上线了一个新的网页,对比Linux开源系统(主要是Ubuntu)与Win ...
- SQLAlchemy基本使用(Flask中)
SQLAlchemy介绍 SQLAlchemy是一个基于Python实现的ORM框架. 该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使用数据 ...
- 使用ShareSDK完成第三方(QQ、微信、微博)登录和分享
这几天遇到一个需求:做第三方登录和分享.遇到了一些坑,把整个过程整理记录下来,方便他人,同时也捋一下思路. 当时考虑过把每个平台的SDK下载下来,一个一个弄,一番取舍后决定还是用ShareSDK.这里 ...