【Android】3.21 示例21—兴趣点收藏功能
分类: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—兴趣点收藏功能的更多相关文章
- 安卓安装提示:Android SDK requires Android Developer Toolkit version 21.1.0 or above. (错误解决方法)
安卓安装提示:Android SDK requires Android Developer Toolkit version 21.1.0 or above. (错误解决方法) 主要是因为版本号不正确 ...
- android git上开源的项目收藏
本文为那些不错的Android开源项目第一篇--个性化控件(View)篇,主要介绍Android上那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Ga ...
- Android端IM应用中的@人功能实现:仿微博、QQ、微信,零入侵、高可扩展
本文由“猫爸iYao”原创分享,感谢作者. 1.引言 最近有个需求:评论@人(没错,就是IM聊天或者微博APP里的@人功能),就像下图这样: ▲ 微信群聊界面里的@人功能 ▲ QQ群聊界面里 ...
- Android使用Fragment来实现ViewPager的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信
以下内容为原创,转载请注明:http://www.cnblogs.com/tiantianbyconan/p/3364728.html 我前两天写过一篇博客<Android使用Fragment来 ...
- Android 摇一摇之双甩功能
Android 摇一摇之双甩功能 最近做一个摇一摇的功能 网上相关代码很多 但是这次的需求有点奇葩 要求是摇两次才生效 看起来好像很简单 但真正要做遇到的问题还是很多 时间限制 机型灵敏性 摇动的方式 ...
- 运行所有sdk目录下的示例,查看它们的功能,方便以后查寻
运行所有sdk目录下的示例,查看它们的功能,方便以后查寻
- Yii中Ajax的使用,如收藏功能
view中 <?php $cs=Yii::app()->clientScript; $cs->registerScriptFile('http://ajax.googleapis.c ...
- SkylineGlobe Android 开发 面积计算示例代码
SkylineGlobe Android 开发 面积计算示例代码: 如果之前熟悉SkylineGlobe桌面端的二次开发,看这些代码应该不难理解. package com.skyline.terrae ...
- Eclipse for android 实现代码自动提示智能提示功能
Eclipse for android 实现代码自动提示智能提示功能,介绍 Eclipse for android 编辑器中实现两种主要文件 java 与 xml 代码自动提示功能,解决 eclips ...
随机推荐
- 【CSWS2014 Summer School】互联网广告中的匹配和排序算法-蒋龙(下)
[CSWS2014 Summer School]互联网广告中的匹配和排序算法-蒋龙(上) Fig19,用到了矩阵,这个我没有听太明白,蒋博士也没有详细说明.不过可以明确的一点就是,我们常说的K-mea ...
- LoadRunner录制:集合点
背景 LoadRunner 执行过程中,有的user 跑的快,有的跑的慢.就导致user1可能还在执行 登录操作呢,user2都已经开始执行查询操作了. 但是在进行负载测试时 ,我们又需要让很多用户同 ...
- ZOJ 2320 Cracking' RSA
其次布尔线性方程组,高斯消元.这道题目的关键部分是看的神牛watashi的思路.另附上watashi的思路 我把他的java模板翻译成了C++的了...存起来以后当模板用...a[i][j]表示第i个 ...
- 项目中用到的ext及js细节
1.js中无replaceAll方法,但能够用replace(regex," "),第一个參数是正則表達式,第二个參数是string,eg:str.replace(/\r\n/g, ...
- 自己动手写处理器之第二阶段(2)——Verilog HDL简单介绍
将陆续上传本人写的新书<自己动手写处理器>(尚未出版),今天是第六篇.我尽量每周四篇 2.3 Verilog HDL简单介绍 本书实现的OpenMIPS处理器是使用Verilog HDL编 ...
- Json动态添加属性
一维Json: var Json={}: Json.name="小明"; Json.age="12": Json.sex="男": 输出效果 ...
- 10、java初始化顺序
在new B一个实例时首先要进行类的装载.(类只有在使用New调用创建的时候才会被java类装载器装入) 2,在装载类时,先装载父类A,再装载子类B3,装载父类A后,完成静态动作(包括静态代码和变 ...
- php-fpm 日志
1.php-fpm 错误日志 #默认位置 安装目录下的 log/php-fpm.log error_log = log/php-fpm.log #错误级别 alert(必须立即处理), error(错 ...
- Zuul使用Ribbon配置自动重试
spring cloud的版本不断演进,导致很多配置的配置方式不断改变,有时某个配置在一个版本里面默认是true,后边一升级默认成了false,这点让人有点不爽. 言归正传 0.所使用版本 sprin ...
- 执行Android项目时指定特定的AVD进行測试
一个Androidproject空间能够创建一个或多个AVD来对指定的Android项目进行測试,假设仅仅创建了一个AVD则执行Android项目时自然启动该AVD,但是假设创建了多个AVD那么我们该 ...