分类: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. UILabel文字竖排

    方法一: UILabel *mindName = [[UILabel alloc]initWithFrame:kCR(, , ,)]; mindName.text = @"苏\n小\n明&q ...

  2. 在VC中创建DLL文件的方法步骤

    一.Win32动态链接库 1.制作的步骤: (1)新建WIN32 Dynamic-link Library工程,工程名为MyDll,选择A simple DLL project类型. (2)MyDll ...

  3. jdbc第三天

    事务 什么是事务? 转账: 1. 给张三账户减1000元 2. 给李四账户加1000元 当给张三账户减1000元后,抛出了异常!这会怎么样呢?我相信从此之后,张三再也不敢转账了. 使用事务就可以处理这 ...

  4. java面试第十三天

    I/O流 流的概念:程序与数据来源之间的桥梁 流的分类: 按数据方向分:输入流和输出流 输入流:InputStream/Reader 输出流:OutputStream/Writer 按数据类型分:字节 ...

  5. tomcat 禁用access.log

    修改 server.xml 注释掉,如: <!-- Access log processes all example. Documentation at: /docs/config/valve. ...

  6. ftpclient 编码备忘

    if (FTPReply.isPositiveCompletion(ftpClient.sendCommand("OPTS UTF8", "ON"))) {// ...

  7. onkeydown-onkeypress-onkeyup

      CreateTime--2016年12月17日22:28:36Author:Marydononkeydown.onkeypress和onkeyup参考链接:http://www.jb51.net/ ...

  8. eclipse cdt Program "make" not found in PATH

    eclipse cdt插件,开发c/c++程序,编译时报错Program "make" not found in PATH经查C:\MinGW\bin下确实无make.exe,有m ...

  9. Xiuno BBS 3.0 轻论坛程序正式版发布。

    github:git clone -b v3.0 https://git.oschina.net/xiuno/xiunobbs 安装包:http://bbs.xiuno.com/down/xiuno_ ...

  10. 提高PHP编码的一些技巧

    1.不要使用相对路径 例如 require_once('../../lib/some_class.php'); 该方法有很多缺点: 1)它首先查找指定的php包含路径, 然后查找当前目录 2)如果该脚 ...