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

简介:介绍如何创建、管理本地收藏的兴趣点数据

详述:

(1)新建本地点收藏;

(2)查看已收藏本地点;

(3)删除已收藏本地点;

一、运行截图

长按选择的兴趣点,就会自动显示该点的经纬度,输入名称,单击【保存】按钮就保存了该兴趣点。可多次重复此过程保存多个兴趣点。

单击【查看全部】按钮,就会显示如下图所示的兴趣点标注。单击标注,会弹出对话框编辑或删除该标注。

单击【删除全部】,将删除所有兴趣点。

二、设计步骤

1、添加xml文件

在layout文件夹下添加下面的3个文件(代码不再列出):

demo21_favorite.xml

demo21_favorite_alert.xml

demo21_favorite_infowindow.xml

2、添加Demo21Favorite.cs文件

在SrcSdkDemos文件夹下添加该文件,然后将代码改为下面的内容:

using Android.App;
using Android.Content.PM;
using Android.OS;
using Android.Views;
using Android.Widget;
using Com.Baidu.Mapapi.Favorite;
using Com.Baidu.Mapapi.Map;
using Com.Baidu.Mapapi.Model;
using System.Collections.Generic; namespace BdMapV371Demos.SrcSdkDemos
{
/// <summary>
/// 演示如何使用本地点收藏功能
/// </summary>
[Activity(Label = "@string/demo_name_favorite",
ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.KeyboardHidden,
ScreenOrientation = ScreenOrientation.Sensor)]
public class Demo21Favorite : Activity
{
//地图相关
private TextureMapView mMapView;
private BaiduMap mBaiduMap; //界面控件相关
private EditText locationText;
private EditText nameText;
private View mPop;
private View mModify;
EditText mdifyName;
//保存点中的点id
private string currentID;
//显示marker用的图标
BitmapDescriptor bdA = BitmapDescriptorFactory.FromResource(Resource.Drawable.icon_marka);
IList<Marker> markers = new List<Marker>();
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.demo21_favorite);
//初始化地图
mMapView = FindViewById<TextureMapView>(Resource.Id.bmapView);
mBaiduMap = mMapView.Map;
mBaiduMap.MapClick += (s, e) =>
{
mBaiduMap.HideInfoWindow();
};
mBaiduMap.MapLongClick += (s, e) =>
{
var point = e.P0;
locationText.Text = string.Format("{0},{1}", point.Latitude, point.Longitude);
};
mBaiduMap.MarkerClick += (s, e) =>
{
var marker = e.P0;
mBaiduMap.HideInfoWindow();
if (marker == null)
{
return;
}
else
{
InfoWindow mInfoWindow = new InfoWindow(mPop, marker.Position, -);
mBaiduMap.ShowInfoWindow(mInfoWindow);
MapStatusUpdate update = MapStatusUpdateFactory.NewLatLng(marker.Position);
mBaiduMap.SetMapStatus(update);
currentID = marker.ExtraInfo.GetString("id");
}
}; //【保存】按钮--添加收藏点
Button btnSave = FindViewById<Button>(Resource.Id.save);
btnSave.Click += delegate
{
if (string.IsNullOrEmpty(nameText.Text))
{
Toast.MakeText(this, "名称必填", ToastLength.Long).Show();
return;
}
if (string.IsNullOrEmpty(locationText.Text))
{
Toast.MakeText(this, "坐标点必填", ToastLength.Long).Show();
return;
}
FavoritePoiInfo info = new FavoritePoiInfo();
info.InvokePoiName(nameText.Text); LatLng pt;
try
{
string strPt = locationText.Text;
string lat = strPt.Substring(, strPt.IndexOf(","));
string lng = strPt.Substring(strPt.IndexOf(",") + );
pt = new LatLng(double.Parse(lat), double.Parse(lng));
info.InvokePt(pt);
if (FavoriteManager.Instance.Add(info) == )
{
Toast.MakeText(this, "添加成功", ToastLength.Long).Show();
}
else
{
Toast.MakeText(this, "添加失败", ToastLength.Long).Show();
}
}
catch
{
Toast.MakeText(this, "坐标解析错误", ToastLength.Long).Show();
}
}; //【查看全部】按钮--获取全部收藏点
Button btnSearchAll = FindViewById<Button>(Resource.Id.searchall);
btnSearchAll.Click += delegate
{
mBaiduMap.Clear();
IList<FavoritePoiInfo> list = FavoriteManager.Instance.AllFavPois;
if (list == null || list.Count == )
{
Toast.MakeText(this, "没有收藏点", ToastLength.Long).Show();
return;
}
//将marker绘制在地图上
markers.Clear();
for (int i = ; i < list.Count; i++)
{
MarkerOptions option = new MarkerOptions()
.InvokeIcon(bdA)
.InvokePosition(list[i].Pt);
Bundle b = new Bundle();
b.PutString("id", list[i].ID);
option.InvokeExtraInfo(b);
markers.Add((Marker)mBaiduMap.AddOverlay(option));
}
}; //【删除全部】按钮--删除全部点
Button btnDeleteAll = FindViewById<Button>(Resource.Id.deleteall);
btnDeleteAll.Click += delegate
{
if (FavoriteManager.Instance.ClearAllFavPois())
{
Toast.MakeText(this, "全部删除成功", ToastLength.Long).Show();
mBaiduMap.Clear();
mBaiduMap.HideInfoWindow();
}
else
{
Toast.MakeText(this, "全部删除失败", ToastLength.Long).Show();
}
}; //初始化收藏夹
FavoriteManager.Instance.Init();
//初始化UI
InitUI();
}
public void InitUI()
{
locationText = FindViewById<EditText>(Resource.Id.pt);
nameText = FindViewById<EditText>(Resource.Id.name); //获取弹框
mPop = LayoutInflater.Inflate(Resource.Layout.demo21_favorite_infowindow, null, false);
//弹框中的【修改】按钮--修改收藏点
Button btnSearchOne = mPop.FindViewById<Button>(Resource.Id.searchone);
btnSearchOne.Click += delegate
{
mBaiduMap.HideInfoWindow();
//弹框修改
mModify = LayoutInflater.Inflate(Resource.Layout.demo21_favorite_alert, null);
mdifyName = mModify.FindViewById<EditText>(Resource.Id.modifyedittext);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.SetView(mModify);
string oldName = FavoriteManager.Instance.GetFavPoi(currentID).PoiName;
mdifyName.Text = oldName;
builder.SetPositiveButton("确认", (sender, args) =>
{
string newName = mdifyName.Text;
if (string.IsNullOrEmpty(newName) == false)
{
//modify
FavoritePoiInfo info = FavoriteManager.Instance.GetFavPoi(currentID);
info.InvokePoiName(newName);
if (FavoriteManager.Instance.UpdateFavPoi(currentID, info))
{
Toast.MakeText(this, "修改成功", ToastLength.Long).Show();
}
}
else
{
Toast.MakeText(this, "名称不能为空,修改失败", ToastLength.Long).Show();
}
(sender as AlertDialog).Dismiss();
});
builder.SetNegativeButton("取消", (sender, args) =>
{
(sender as AlertDialog).Dismiss();
});
builder.Create().Show();
};
//弹框中的【删除】按钮--删除一个指定点
Button btnDeleteOne = mPop.FindViewById<Button>(Resource.Id.deleteone);
btnDeleteOne.Click += delegate
{
if (FavoriteManager.Instance.DeleteFavPoi(currentID))
{
Toast.MakeText(this, "删除点成功", ToastLength.Long).Show();
if (markers != null)
{
for (int i = ; i < markers.Count; i++)
{
if (markers[i].ExtraInfo.GetString("id") == currentID)
{
markers[i].Remove();
markers.RemoveAt(i);
mBaiduMap.HideInfoWindow();
break;
}
}
}
}
else
{
Toast.MakeText(this, "删除点失败", ToastLength.Long).Show();
}
};
} protected override void OnPause()
{
mMapView.OnPause();
base.OnPause();
} protected override void OnResume()
{
mMapView.OnResume();
base.OnResume();
} protected override void OnDestroy()
{
//释放收藏夹功能资源
FavoriteManager.Instance.Destroy();
bdA.Recycle();
// MapView的生命周期与Activity同步,当activity销毁时需调用MapView.destroy()
mMapView.OnDestroy();
mBaiduMap = null;
base.OnDestroy();
}
}
}

3、修改MainActivity.cs文件

在MainActivity.cs文件的demos字段定义中,去掉【示例21】下面的注释。

运行观察效果。

【Android】3.21 示例21—兴趣点收藏功能的更多相关文章

  1. 安卓安装提示:Android SDK requires Android Developer Toolkit version 21.1.0 or above. (错误解决方法)

    安卓安装提示:Android SDK requires Android Developer Toolkit version 21.1.0 or above.  (错误解决方法) 主要是因为版本号不正确 ...

  2. android git上开源的项目收藏

    本文为那些不错的Android开源项目第一篇--个性化控件(View)篇,主要介绍Android上那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Ga ...

  3. Android端IM应用中的@人功能实现:仿微博、QQ、微信,零入侵、高可扩展

    本文由“猫爸iYao”原创分享,感谢作者. 1.引言 最近有个需求:评论@人(没错,就是IM聊天或者微博APP里的@人功能),就像下图这样:   ▲ 微信群聊界面里的@人功能    ▲ QQ群聊界面里 ...

  4. Android使用Fragment来实现ViewPager的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信

    以下内容为原创,转载请注明:http://www.cnblogs.com/tiantianbyconan/p/3364728.html 我前两天写过一篇博客<Android使用Fragment来 ...

  5. Android 摇一摇之双甩功能

    Android 摇一摇之双甩功能 最近做一个摇一摇的功能 网上相关代码很多 但是这次的需求有点奇葩 要求是摇两次才生效 看起来好像很简单 但真正要做遇到的问题还是很多 时间限制 机型灵敏性 摇动的方式 ...

  6. 运行所有sdk目录下的示例,查看它们的功能,方便以后查寻

    运行所有sdk目录下的示例,查看它们的功能,方便以后查寻

  7. Yii中Ajax的使用,如收藏功能

    view中 <?php $cs=Yii::app()->clientScript; $cs->registerScriptFile('http://ajax.googleapis.c ...

  8. SkylineGlobe Android 开发 面积计算示例代码

    SkylineGlobe Android 开发 面积计算示例代码: 如果之前熟悉SkylineGlobe桌面端的二次开发,看这些代码应该不难理解. package com.skyline.terrae ...

  9. Eclipse for android 实现代码自动提示智能提示功能

    Eclipse for android 实现代码自动提示智能提示功能,介绍 Eclipse for android 编辑器中实现两种主要文件 java 与 xml 代码自动提示功能,解决 eclips ...

随机推荐

  1. Java从零开始学三十五(JAVA IO- 字节流)

    一.字节流 FileOutputStream是OutputStream 的直接子类 FileInputStream也是InputStream的直接子类 二.文本文件的读写 2.1.字节输入流 Test ...

  2. 利用Session完成用户的登录和注销

    用户的登录和注销是最常见的Web应用案例,当一个应用的客户登录了以后,其他所有的会话都得知道这个用户已经登录还很有可能得提取用户的昵称予以显示等等,所以,只有把登录成功的用户的信息放入到Session ...

  3. 《Java并发编程实战》第九章 图形用户界面应用程序界面 读书笔记

    一.为什么GUI是单线程化 传统的GUI应用程序通常都是单线程的. 1. 在代码的各个位置都须要调用poll方法来获得输入事件(这样的方式将给代码带来极大的混乱) 2. 通过一个"主事件循环 ...

  4. 解决java.sql.SQLException: Incorrect string value: '\xE6\x88\x91\xE7\x9A\x84...' for column 'groupName'

    今天使用mysql,用java程序往mysql中写数据,出现如下错误: Caused by: java.sql.SQLException: Incorrect string value: '\xD3\ ...

  5. 最新美行地图Z13升级攻略

    原文地址:http://bbs.gpsuu.com/read.php?tid-231134.html  2013年11月16日订车,4S答应送导航,却没有提送什么导航.12月24日提车,DVD导航一体 ...

  6. Centos定时执行python脚本

    其实就是linux的定时任务.老记不住参数,这次写下来,省着老百度.本文没有技术含量,请大家不要吐槽. ================================================ ...

  7. mysql中innodb和myisam的区别

    InnoDB和MyISAM是很多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,5.7之后就不一样了 1.事务和外键 InnoDB具有事务,支持4个事务隔离级别,回滚,崩溃修复能力和多版 ...

  8. iOS开发-Objective-C Block的实现方式

    前言:我们可以把Block当作一个闭包函数,它可以访问外部变量和局部变量,但默认是不可以修改外部变量.你可以使用它来做回调方法,比起使用代理(Delegate)会更加直观.顺带一提,苹果很多的接口(A ...

  9. HDUOJ---携程员工运动会场地问题

    携程员工运动会场地问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  10. HDUOJ---1233还是畅通工程

    还是畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...