分类: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. Android 的一些提示框

    1.在测试时,如何实现一个提示 可以使用 Toast.makeText(this, "这是一个提示", Toast.LENGTH_SHORT).show(); //从资源文件str ...

  2. es6(const、let)

    首先我很好奇,明明现代浏览器支持ES6.ES7不是那么好,为何还推行? var let const 有何区别?它们之间的限制又是什么?且听我娓娓道来 1. var 和let的关系,为何推荐let? ( ...

  3. JSTL 标签库 使用(web基础学习笔记十九)

    标签库概要: 一.C标签库介绍 1.1.<c:> 核心标签库  JSTL 核心标签库(C标签)标签共有13个,功能上分为4类:1.表达式控制标签:out.set.remove.catch2 ...

  4. PHPstorm自定义快捷键

    Ctrl+alt+S 打开设置 PHPstorm 设置 PHPstorm 主题安装 自定义快捷键设置 ·全屏 F11 ·另外一种全屏alt+F11 Database数据库管理 alt+d Termin ...

  5. pushlet单播与多播

    近期要弄一个消息推送的功能,在网上找了非常多的关于pushlet的文章,尽管写的都非常具体,可是本人看了以后却总认为是模棱两可···不知道怎样下手,终于參考了这些文章中的一些内容,并结合官网的源码.做 ...

  6. 使用任务Task 简化异步编程

    使用任务简化异步编程 Igor Ostrovsky 下载代码示例 异步编程是实现与程序其余部分并发运行的较大开销操作的一组技术. 常出现异步编程的一个领域是有图形化 UI 的程序环境:当开销较大的操作 ...

  7. Linux内核源代码分析方法

    Linux内核源代码分析方法   一.内核源代码之我见 Linux内核代码的庞大令不少人"望而生畏",也正由于如此,使得人们对Linux的了解仅处于泛泛的层次.假设想透析Linux ...

  8. 机器学习性能度量指标:AUC

    在IJCAI 于2015年举办的竞赛:Repeat Buyers Prediction Competition 中, 很多参赛队伍在最终的Slides展示中都表示使用了 AUC 作为评估指标:     ...

  9. 由ConcurrentLinkedQueue扯到线程安全 待整理

    前几天项目总是报错,找了下原因. ConcurrentLinkedQueue 本身是一个基于链接节点的无界线程安全队列,你自己调用就不用考虑线程安全了吗? 结论是:原子性操作当然是线程安全的,非原子性 ...

  10. Android开发学习之对话框浅析

    对话框式程序运行中弹出的窗口.Android系统中有四种默认的对话框:警告对话框AlertDialog.进度对话框ProgressDialog.日期选择对话框DatePickerDialog以及时间选 ...