分类: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. linux 目录结构(转)

    原文:http://www.centoscn.com/CentOS/2014/1222/4347.html linux 目录结构 /: 根目录,一般根目录下只存放目录,不要存放文件,/etc./bin ...

  2. rmdir 命令(转)

    原文:http://www.cnblogs.com/peida/archive/2012/10/27/2742076.html rmdir命令.rmdir是常用的命令,该命令的功能是删除空目录,一个目 ...

  3. 关闭ubuntu终端的BELL声音

    在shell提示符下面操作时有时会用到Tab来自动补全,这个时候系统就会发出BELL的声音,听了让人挺烦的. 有个方法能解决:编辑 /etc/inputrc,找到#set bell-style non ...

  4. XML 文档结构必须从头至尾包含在同一个实体内

      XML 文档结构必须从头至尾包含在同一个实体内 CreateTime--2018年4月2日16:40:58 Author:Marydon 问题还原: <![CDATA[ <?xml v ...

  5. c中的static

    static的作用 1)保持变量值:在函数体,一个被声明为静态的变量在这一函数中可以维持其值.这句话可能描述不太准确,大家看下面这个例子吧. void staticLocalVar() { stati ...

  6. Linux 系统文件类型

    在Linux中只有一下7种文件类型 1.普通文件(-表示,可用ls -l查看) 2.目录(d)[在linux中,任何东西都被看成文件,外设备也看成文件,注意是任何东西] 3.字符设备文件(c) 4.块 ...

  7. Python处理JSON(转)

    参考: 概念 序列化(Serialization):将对象的状态信息转换为可以存储或可以通过网络传输的过程,传输的格式可以是JSON.XML等.反序列化就是从存储区域(JSON,XML)读取反序列化对 ...

  8. define() vs const 该如何选择?

    使用 define(),除非考虑到可读性.类常量.或关注微优化 1.在 PHP 中是使用 define() 函数来定义常量,PHP 5.3.0 以后,PHP 中也能够使用 const 关键字来声明常量 ...

  9. PHP基于Sphinx+Swcs中文分词的全文的检索

    简介 Sphinx是开源的搜索引擎,它支持英文的全文检索.所以如果单独搭建Sphinx,你就已经可以使用全文索引了 但是有些时候我们还要进行中文分词所有scws就出现了,我们也可以使用Coreseek ...

  10. HDUOJ----A Computer Graphics Problem

    A Computer Graphics Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (J ...