首页 > 系统 > Android > 正文

【Android】第3章(7)地图基本控制方法

2019-11-14 13:28:29
字体:
来源:转载
供稿:网友

分类:C#、Android、VS2015、百度地图应用; 创建日期:2016-02-04

一、简介

文件名:Demo05MapControl.cs

简介:介绍平移和缩放地图,双指操作地图,监听地图点击事件

详述:

(1)介绍地图缩放级别、旋转度和俯视度的get和set方法;

(2)监听单击和长按地图事件;

(3)单击、双击和长按地图获取该点的经纬度坐标;

(4)对地图显示内容进行截图,截图保存地址为:/mnt/sdcard/test.png;

运行截图

在x86模拟器中的运行效果如下:

image

二、设计步骤

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="1"            android:text="缩放" />        <EditText            android:id="@+id/zoomlevel"            android:layout_width="fill_parent"            android:layout_height="wrap_content"            android:layout_weight="1"            android:text="10" />        <Button            android:id="@+id/rotatebutton"            android:layout_width="fill_parent"            android:layout_height="wrap_content"            android:layout_weight="1"            android:text="旋转" />        <EditText            android:id="@+id/rotateangle"            android:layout_width="fill_parent"            android:layout_height="wrap_content"            android:layout_weight="1"            android:text="90" />        <Button            android:id="@+id/overlookbutton"            android:layout_width="fill_parent"            android:layout_height="wrap_content"            android:layout_weight="1"            android:text="俯视" />        <EditText            android:id="@+id/overlookangle"            android:layout_width="fill_parent"            android:layout_height="wrap_content"            android:layout_weight="1"            android:text="-30" />    </LinearLayout>    <TextView        android:id="@+id/state"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:lines="3"        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, 100, 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()),

 

运行观察结果。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表