【Android】3.6 地图基本控制方法
分类:C#、Android、VS2015、百度地图应用; 创建日期:2016-02-04
一、简介
文件名:Demo05MapControl.cs
简介:介绍平移和缩放地图,双指操作地图,监听地图点击事件
详述:
(1)介绍地图缩放级别、旋转度和俯视度的get和set方法;
(2)监听单击和长按地图事件;
(3)单击、双击和长按地图获取该点的经纬度坐标;
(4)对地图显示内容进行截图,截图保存地址为:/mnt/sdcard/test.png;
运行截图
在x86模拟器中的运行效果如下:
二、设计步骤
1、添加demo06_mapcontrol.axml
在layout文件夹下添加该文件,将其改为下面的代码:
<?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="50dip"
android:orientation="horizontal" > <Button
android:id="@+id/zoombutton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight=""
android:text="缩放" /> <EditText
android:id="@+id/zoomlevel"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight=""
android:text="" /> <Button
android:id="@+id/rotatebutton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight=""
android:text="旋转" /> <EditText
android:id="@+id/rotateangle"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight=""
android:text="" /> <Button
android:id="@+id/overlookbutton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight=""
android:text="俯视" /> <EditText
android:id="@+id/overlookangle"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight=""
android:text="-30" />
</LinearLayout> <TextView
android:id="@+id/state"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:lines=""
android:text="点击、长按、双击地图以获取经纬度和地图状态" /> <RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" > <com.baidu.mapapi.map.TextureMapView
android:id="@+id/bmapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true" /> <Button
android:id="@+id/savescreen"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_marginTop="10dip"
android:text="截图" />
</RelativeLayout> </LinearLayout>
2、添加Demo06MapControl.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.IO; namespace BdMapV371Demos.SrcSdkDemos
{
/// <summary>
/// 演示地图缩放,旋转,视角控制
/// </summary>
[Activity(Label = "@string/demo_name_control",
ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.KeyboardHidden,
ScreenOrientation = ScreenOrientation.Sensor)]
public class Demo06MapControl : Activity,
BaiduMap.IOnMapClickListener, BaiduMap.IOnMapLongClickListener,
BaiduMap.IOnMapDoubleClickListener, BaiduMap.IOnMapStatusChangeListener,
BaiduMap.ISnapshotReadyCallback
{
private TextureMapView mMapView;
private BaiduMap mBaiduMap; /// <summary>
/// 当前地点击点
/// </summary>
private LatLng currentPt; private string touchType; /// <summary>
/// 用于显示地图状态的面板
/// </summary>
private TextView mStateBar; protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.demo06_mapcontrol); mMapView = FindViewById<TextureMapView>(Resource.Id.bmapView);
mBaiduMap = mMapView.Map;
mBaiduMap.SetMapStatus(MapStatusUpdateFactory.NewLatLng(MainActivity.HeNanUniversity)); mStateBar = FindViewById<TextView>(Resource.Id.state);
mBaiduMap.SetOnMapClickListener(this);
mBaiduMap.SetOnMapLongClickListener(this);
mBaiduMap.SetOnMapDoubleClickListener(this);
mBaiduMap.SetOnMapStatusChangeListener(this); var btnZoom = FindViewById<Button>(Resource.Id.zoombutton);
btnZoom.Click += delegate
{
//处理缩放 sdk 缩放级别范围: [3.0, 19.0]
EditText t = FindViewById<EditText>(Resource.Id.zoomlevel);
try
{
float zoomLevel = float.Parse(t.Text);
MapStatusUpdate u = MapStatusUpdateFactory.ZoomTo(zoomLevel);
mBaiduMap.AnimateMapStatus(u);
}
catch
{
Toast.MakeText(this, "请输入正确的缩放级别", ToastLength.Short).Show();
}
UpdateMapState();
}; var btnRotate = FindViewById<Button>(Resource.Id.rotatebutton);
btnRotate.Click += delegate
{
//处理旋转。旋转角范围:-180~180 , 单位:度,逆时针旋转
EditText t = FindViewById<EditText>(Resource.Id.rotateangle);
try
{
int rotateAngle = int.Parse(t.Text);
MapStatus ms = new MapStatus.Builder(mBaiduMap.MapStatus).Rotate(rotateAngle).Build();
MapStatusUpdate u = MapStatusUpdateFactory.NewMapStatus(ms);
mBaiduMap.AnimateMapStatus(u);
}
catch
{
Toast.MakeText(this, "请输入正确的旋转角度", ToastLength.Short).Show();
}
UpdateMapState();
}; var btnOverlook = FindViewById<Button>(Resource.Id.overlookbutton);
btnOverlook.Click += delegate
{
//处理俯视。俯角范围:-45~0, 单位:度
EditText t = FindViewById<EditText>(Resource.Id.overlookangle);
try
{
int overlookAngle = int.Parse(t.Text);
MapStatus ms = new MapStatus.Builder(mBaiduMap.MapStatus).Overlook(overlookAngle).Build();
MapStatusUpdate u = MapStatusUpdateFactory.NewMapStatus(ms);
mBaiduMap.AnimateMapStatus(u);
}
catch
{
Toast.MakeText(this, "请输入正确的俯角", ToastLength.Short).Show();
}
UpdateMapState();
}; var btnSaveScreen = FindViewById<Button>(Resource.Id.savescreen);
btnSaveScreen.Click += delegate
{
// 截图(在SnapshotReadyCallback中保存图片到sd卡)
mBaiduMap.Snapshot(this);
Toast.MakeText(this, "正在截取屏幕图片...", ToastLength.Short).Show();
UpdateMapState();
};
} #region 实现BaiduMap.IOnMapClickListener接口
public void OnMapClick(LatLng p0)
{
touchType = "单击";
currentPt = p0;
UpdateMapState();
} public bool OnMapPoiClick(MapPoi p0)
{
return false;
}
#endregion #region 实现BaiduMap.IOnMapLongClickListener接口
public void OnMapLongClick(LatLng p0)
{
touchType = "长按";
currentPt = p0;
UpdateMapState();
}
#endregion #region 实现BaiduMap.IOnMapDoubleClickListener接口
public void OnMapDoubleClick(LatLng p0)
{
touchType = "双击";
currentPt = p0;
UpdateMapState();
}
#endregion #region 实现BaiduMap.IOnMapStatusChangeListener接口
public void OnMapStatusChange(MapStatus p0)
{
UpdateMapState();
} public void OnMapStatusChangeFinish(MapStatus p0)
{
UpdateMapState();
} public void OnMapStatusChangeStart(MapStatus p0)
{
UpdateMapState();
}
#endregion #region 实现BaiduMap.ISnapshotReadyCallback接口
public void OnSnapshotReady(Bitmap p0)
{
string file = "/mnt/sdcard/test.png";
FileStream outX;
try
{
outX = new FileStream(file, FileMode.Create);
if (p0.Compress(
Bitmap.CompressFormat.Png, , outX))
{
outX.Flush();
outX.Close();
}
Toast.MakeText(this,
"屏幕截图成功,图片保存在: " + file.ToString(),
ToastLength.Short).Show();
}
catch (FileNotFoundException e)
{
throw e;
}
catch (IOException e)
{
throw e;
}
}
#endregion /// <summary>
/// 更新地图状态显示面板
/// </summary>
private void UpdateMapState()
{
if (mStateBar == null)
{
return;
}
string state = "";
if (currentPt == null)
{
state = "点击、长按、双击地图以获取经纬度和地图状态";
}
else
{
state = string.Format(touchType + ",当前经度:{0:f6} 当前纬度:{1:f6}",
currentPt.Longitude, currentPt.Latitude);
}
state += "\n";
MapStatus ms = mBaiduMap.MapStatus;
state += string.Format("zoom={0:f2},rotate={1:d},overlook={2:d}",
ms.Zoom, (int)ms.Rotate, (int)ms.Overlook);
mStateBar.Text = state;
} protected override void OnPause()
{
mMapView.OnPause();
base.OnPause();
} protected override void OnResume()
{
mMapView.OnResume();
base.OnResume();
} protected override void OnDestroy()
{
mMapView.OnDestroy();
base.OnDestroy();
}
}
}
3、修改MainActivity.cs
在MainActivity.cs文件的demos字段定义中添加下面的代码。
//示例6--地图操作功能
new DemoInfo<Activity>(Resource.String.demo_title_control,
Resource.String.demo_desc_control,
new Demo06MapControl()),
运行观察结果。
【Android】3.6 地图基本控制方法的更多相关文章
- android定位和地图开发实例
在android开发中地图和定位是很多软件不可或缺的内容,这些特色功能也给人们带来了很多方便. 首先介绍一下地图包中的主要类: MapController : 主要控制地图移动,伸缩,以某个GPS坐标 ...
- Android使用百度地图出现闪退及定位时显示蓝屏问题
目录 1.Android使用百度地图出现闪退 2.Android使用百度地图定位出现蓝屏问题 1.Android使用百度地图出现闪退 一般情况下出现闪退是在AndroidManifest.x ...
- Android 打开高德地图、百度地图进行导航;打开第三方App去导航;
抽成工具类了,复制下来就能直接用了,直接看代码吧: 高德地图Url Api: http://lbs.amap.com/api/amap-mobile/guide/android/navigation ...
- Android studio百度地图demo出现230错误,key校验失败
转自daoxiaomianzi原文 Android studio 百度地图demo出现230错误,key校验失败 使用AndroidStudio导入Baidu地图的as版的demo,引入后,发现没有k ...
- Android studio 百度地图开发(3)地图导航
Android studio 百度地图开发(3)地图导航 email:chentravelling@163.com 开发环境:win7 64位,Android Studio,请注意是Android S ...
- Android studio 百度地图开发(2)地图定位
Android studio 百度地图开发(2)地图定位 email:chentravelling@163.com 开发环境:win7 64位,Android Studio,请注意是Android S ...
- Android 绘制中国地图
最近的版本有这样一个需求: 有 3 个要素: 中国地图 高亮省区 中心显示数字 面对这样一个需求,该如何实现呢? 高德地图 因为项目是基于高德地图来做的,所以很自然而然的想到了高德.但是当查阅高德地图 ...
- Android 调用百度地图API
一.到 百度地图开发平台下载SDK http://lbsyun.baidu.com/index.php?title=androidsdk/sdkandev-download 1.点击自定义下载 2.下 ...
- Android下百度地图开发(一):基础地图展示
最终效果如: 这个需要详细说下,准备工作较为繁琐. 第一步:去百度申请一个开发者账号,新建一个android应用,会让你输入开发者SHA1,目前我只拿到开发版SHA1,发布版那里也填的是这个. 获取方 ...
随机推荐
- .NET破解之迅捷PDF转换器(续)
在以前的博文<.NET破解之迅捷PDF转换器>中使用了暴力破解的方法,现在软件版本从5.0升级到6.3,所以也尝试用新的方法. 方法一:暴力破解法 如往常一样,查找搜索到关键的函数,即Is ...
- jansson的使用
https://jansson.readthedocs.org/en/2.5/gettingstarted.html https://github.com/akheron/jansson/blob/m ...
- Java从零开始学三十(String和StringBuffer类)
一.StringBuffer连接字符操作 当一个字符串的内容需要被经常改变时就要使用StringBuffer 在StringBuffer中使用append()方法,完成字符串的连接操作 二.Str ...
- 使用QQ截图右键菜单
(1)登录QQ: (2)同时按住Shift+Ctrl+Alt+A四个键,然后点击右键: (3)松开Shift键(只松开Shift键,其他键不要松开).惊喜出现了吧!
- maven 创建web项目的标准目录结构
maven 创建web项目的标准目录结构 CreateTime--2018年4月18日21:05:37 Author:Marydon 1.标准目录介绍(开发目录) 2.在eclipse下,目录展示 ...
- 如何通过from语句调用模块的变量名?
# -*- coding: utf-8 -*- #python 27 #xiaodeng #如何通过from语句调用模块的变量名? #my.py def printer(x): print x #如何 ...
- 13、java中8中基本类型
一.基本类型介绍 关键字 数据类型 占用字节数 取值范围 默认值 byte 字节型 1个字节 -128~127 0 char 字符型 2个字节 Unicode0~Unicode215-1 \u0000 ...
- iOS-夜间模式(换肤设置)
概述 iOS 开发中有时候会有夜间模式(换肤设置)的需求, 主要是更改相关颜色操作每次切换夜间/白天模式时,都会发出通知给所有ViewController,让它们切换到相应的主题. 详细 代码下载:h ...
- Android网络开发之WebKet引擎基础
Android浏览器的内核是Webkit引擎,WebKit的前身是KDE小组的KHTML. Apple公司推出的Safari浏览器,使用的内核是装备了KHTML的WebKit引擎. WebKit内核在 ...
- Asp.Net中using的使用的方法(转)
摘自:http://blog.sina.com.cn/s/blog_6aa9c73801018ggw.html 一.强制资源整理(实用性非常强,希望大家多多使用,比try-catch-finaly效率 ...