Android开发初体验之百度地图开发(3)
在前面文章我分享了如何开始初步的使用百度地图API以及地图搜索功能,这次我将分享如何在百度地图上设置marker,以及info窗口,这次也主要是参考了鸿洋老师的博客,大家想继续学习的话也可以关注一下鸿洋老师的博客。当然百度地图的官方demo也有相关的教程,大家也可以看看。
了解百度地图如何添加覆盖物
覆盖物就是我们自己往地图上添加的东西,这个形状可以由自己设置,标注点里面的信息也由自己设置,大家也可以看看百度地图官方对于覆盖物的介绍。
上面图片所示的就是如何添加marker,右边就是覆盖物的类型了,其实几种都差不多,大家学会一种其他的差不多也就会了。
为marker设置信息
记录相应点的经纬度信息
我们想要添加marker,首先得找一些地点的经纬度信息,这个我们可以去百度地图api 的官网去找到坐标拾取器。如下图所示:
打开坐标拾取器之后我们就输入自己想添加点的位置,然后记录下位置的经纬度就可以了。
编写布局文件
我们要想为地图添加info窗口的话,我们得先写一个info窗口,我们在布局文件下添加下面这些代码
<RelativeLayoutandroid:id="@+id/marker_info"android:layout_width="350dp"android:layout_height="120dp"android:background="#FFFFFF"android:clickable="true"android:layout_marginBottom="33dp"android:visibility="gone"android:layout_above="@+id/my_location"android:layout_centerHorizontal="true"><ImageViewandroid:id="@+id/info_img"android:layout_width="90dp"android:layout_height="90dp"android:layout_marginLeft="12dp"android:layout_marginRight="12dp"android:alpha="1.0"android:background="@drawable/map_image_border_white"android:clickable="true"android:scaleType="fitXY"android:src="@drawable/axin"android:layout_centerVertical="true"android:layout_alignParentStart="true"android:layout_marginStart="10dp" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/info_name"android:text="@string/app_name"android:textColor="#121212"android:textSize="15sp"android:layout_marginStart="33dp"android:layout_alignTop="@+id/info_img"android:layout_toEndOf="@+id/info_img" /><TextViewandroid:id="@+id/info_content"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/app_name"android:textSize="20sp"android:textColor="#121212"android:layout_centerVertical="true"android:layout_alignStart="@+id/info_name" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="信誉积分:"android:layout_alignBottom="@+id/info_img"android:layout_alignStart="@+id/info_content"android:id="@+id/textView5" /><TextViewandroid:id="@+id/info_credit"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="100"android:layout_alignBottom="@+id/textView5"android:layout_alignParentEnd="true"android:layout_toEndOf="@+id/textView5" /></RelativeLayout>
创建info类
我们为了模拟后台提供数据,我们先写一个info类,由于我们仅仅只是模拟,所以我们把info类里面的数据写成静态的,然后为info类设置构造函数就行了。
package com.example.test;import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;public class Info implements Serializable {/*** 精度*/private double latitude;/*** 纬度*/private double longitude;/*** 图片ID,服务器中为图片路径*/private int imgId;/*** 姓名*/private String name;/*** 帮助或者服务内容*/private String content;/** 信誉积分*/private String credit;public static List<Info> infos = new ArrayList<Info>();static {infos.add(new Info(30.652696,104.056063, R.drawable.axin, "阿信", "帮我在城南买个火锅底料", "120"));infos.add(new Info(30.669488,104.061614, R.drawable.chenduling, "小陈","可以在成都地区跑个腿", "130"));infos.add(new Info(30.666397,104.034848,R.drawable.zhoujielun, "阿杰","想吃青羊区的李记兔头", "143"));infos.add(new Info(30.553369,114.305926, R.drawable.linjunjie, "大俊","我可以帮你们买江汉路附近的美食", "113"));infos.add(new Info(30.550239,114.309052, R.drawable.xuezhiqian,"小谦","我想配副眼睛","159"));infos.add(new Info(30.593933,114.277316, R.drawable.guobiting,"老郭","我想要一个孙中山纪念像!","148"));infos.add(new Info(39.915119,116.403963,R.drawable.alalei,"小蕾","我可以代买故宫门票哦","125"));infos.add(new Info(39.991002,116.328896,R.drawable.xiaoyan,"阿萌","我可以代买北京特产","254"));infos.add(new Info(39.916224,116.417435,R.drawable.dilireba,"胖迪","我想买个雕像","287"));}public Info(){}public Info(double latitude, double longitude, int imgId, String name, String content, String credit ){super();this.latitude = latitude;this.longitude = longitude;this.imgId = imgId;this.name = name;this.content = content;this.credit= credit;}public double getLatitude(){return latitude;}public void setLatitude(double latitude){this.latitude = latitude;}public double getLongitude(){return longitude;}public void setLongitude(double longitude){this.longitude = longitude;}public String getName(){return name;}public int getImgId(){return imgId;}public void setImgId(int imgId){this.imgId = imgId;}public void setName(String name){this.name = name;}public String getContent(){return content;}public void setContent(String content){this.content = content;}public String getCredit(){return credit;}public void setCredit(String credit){this.credit = credit;}}
根据info类为控件设置信息
因为我们上面写好了info类,所以我们接下来写一个函数将info类中的信息设置到我们之前编写的控件上面。
/*** 根据info为布局上的控件设置信息**/protected void popupInfo(RelativeLayout infowindows, Info info){ViewHolder viewHolder = null;if (infowindows.getTag() == null){viewHolder = new ViewHolder();viewHolder.infoImg = (ImageView) infowindows.findViewById(R.id.info_img);viewHolder.infoName = (TextView) infowindows.findViewById(R.id.info_name);viewHolder.infoContent = (TextView) infowindows.findViewById(R.id.info_content);viewHolder.infoCredit = (TextView) infowindows.findViewById(R.id.info_credit);infowindows.setTag(viewHolder);}viewHolder = (ViewHolder) infowindows.getTag();viewHolder.infoImg.setImageResource(info.getImgId());viewHolder.infoContent.setText(info.getContent());viewHolder.infoName.setText(info.getName());viewHolder.infoCredit.setText(info.getCredit());}/*** 复用弹出面板infowindows的控件** @author shang**/private class ViewHolder{ImageView infoImg;TextView infoName;TextView infoContent;TextView infoCredit;}
为地图添加marker
根据info类中坐标将marker添加进地图中
由于我们在info类设置了坐标信息,所以我们只需要写个add函数就可以将marker添加到地图相应的位置。
/*** 为地图添加marker*/public void addInfosOverlay(List<Info> infos){baiduMap.clear();LatLng latLng = null;OverlayOptions overlayOptions = null;Marker marker = null;for (Info info : infos){// 位置latLng = new LatLng(info.getLatitude(), info.getLongitude());// 图标overlayOptions = new MarkerOptions().position(latLng).icon(mIconMaker).zIndex(5);marker = (Marker) (baiduMap.addOverlay(overlayOptions));Bundle bundle = new Bundle();bundle.putSerializable("info", info);marker.setExtraInfo(bundle);}}
为marker和infowindows设置点击事件
我们若要点击marker时出现infowindows我们就得为marker设置一个点击事件,我们还要为infowindows设置一个点击事件,这样就可以点击infowindows进入下一个布局或者出现新的信息。我们还得通过点击地图空白处让infowindows消失。这样代码如下:
//marker的点击事件baiduMap.setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() {@Overridepublic boolean onMarkerClick(Marker marker) {// 获得marker中的数据Info info = (Info) marker.getExtraInfo().get("info");// 根据商家信息为详细信息布局设置信息infowindows.setVisibility(View.VISIBLE);popupInfo(infowindows, info);return true;}});
/** 百度地图点击事件将InfoWindow隐藏*/private void InitMapClick() {baiduMap.setOnMapClickListener(new BaiduMap.OnMapClickListener() {@Overridepublic boolean onMapPoiClick(MapPoi arg0) {// TODO Auto-generated method stubreturn false;}@Overridepublic void onMapClick(LatLng arg0) {infowindows.setVisibility(View.GONE);baiduMap.hideInfoWindow();}});}
//infowindows的点击事件infowindows.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//执行的事件}});
这就是如何在百度地图中添加marker,至此百度开发初级三部曲结束,当然由于百度的api一直在更新所以大家若是想进一步学习的话,就要多多研究一下百度官方给出的demo。
这里面上面项目的源代码:http://pan.baidu.com/s/1mi64jRM 密码:hda9
Android开发初体验之百度地图开发(3)相关推荐
- Windows Embedded CE 6.0开发初体验(二)CE开发环境 收藏
上一篇<Windows Embedded CE 6.0开发初体验>之"嵌入式开发流程": http://blog.csdn.net/aawolf/archive/200 ...
- Windows Embedded CE 6.0开发初体验(一)Windows CE概述
这篇文章的目的并不是介绍Windows Embedded CE开发的方方面面,只是用一个初涉嵌入式领域的软件开发者的视角来介绍Windows CE开发中最常用的概念和知识,解决大家会在实际开发中碰到的 ...
- 用android studio测量距离,Android studio 百度地图开发(6)Marker绑定事件、计算两点距离...
Android studio 百度地图开发(6)Marker绑定事件.计算两点距离 email:chentravelling@163.com 开发环境:win7 64位,Android Studio, ...
- Android 百度地图开发(一)--- 申请API Key和在项目中显示百度地图
2019独角兽企业重金招聘Python工程师标准>>> 最近自己想研究下地图,本来想研究google Map,但是申请API key比较坑爹,于是从百度地图入手,其实他们的用法都差不 ...
- 基于Android的百度地图开发
参考资料: android studio获得SHA1的值,然后在百度地图移动版API官网申请key Android Studio怎么查看程序的安全码获取SHA1值? http://www.codese ...
- [android] 百度地图开发 (二).定位城市位置和城市POI搜索
一. 百度地图城市定位和POI搜索知识 上一篇文章"百度地图开发(一)"中讲述了如何申请百度APIKey及解决显示空白网格的问题.该篇文章主要讲述如何定位城市位置.定位 ...
- Android 百度地图开发(一)
2019独角兽企业重金招聘Python工程师标准>>> 现在好多手机应用开发需要使用到百度地图,在使用百度地图的过程和遇到的问题整理一下方便以后使用 申请密钥 使用白度地图首先需要申 ...
- android 百度开发论坛,Android 百度地图开发(一)
现在好多手机应用开发需要使用到百度地图,在使用百度地图的过程和遇到的问题整理一下方便以后使用 申请密钥 使用白度地图首先需要申请API Key,申请百度账户才能得到API Key. 登录 http:/ ...
- 使用Kotlin开发Android应用初体验
使用Kotlin开发Android应用初体验 昨晚,最近一届的谷歌IO大会正式将Kotlin确定为了官方开发语言,作为一名Android开发鸟,怎么能不及时尝尝鲜呢? Kotlin的简要介绍 在开发之 ...
最新文章
- MS SQL Server存储过程
- 组合模式测试组合模式(Composite Pattern)
- 2016 -1 -3 导航控制器的学习
- 后端学习 - Spring5
- 想创业怕失败就不要轻易选择去创业
- 用C#实现屏幕键盘!
- HTML map 设置图热点
- Mac OS X 更新JAMF域控配置
- kafka知识 --kafka权威指南
- 算法第四版开发环境的配置
- 怎么样正确卸载Flash Player插件
- 【备忘】总结一些Java学习者经常去的网站及论坛
- python openpyxl创建excel文件,自己选择excel保存的位置
- 《孩子,你慢慢来》的读书笔记与读后感2600字
- python 几行代码实现自动回复功能
- Chapter 5. Monte Carlo Methods
- 揭秘诈骗团伙通过裸聊软件实施敲诈勒索
- 投资,不能也不想做的太复杂
- DVWA学习之XSS(跨站脚本攻击)(超级详细)
- 2020.07 学习日记
热门文章
- chmod的使用 czy:czy 文件名
- UE4 EQS C++自定义节点编写
- python3数据可视化软件_Python数据可视化工具Plotly
- 王者荣耀在android目录下的名字,王者荣耀名字空白代码怎么弄_名字空白代码设置方法...
- keras简单的实际入门教程
- Ls-Dyna对预应力钢筋混凝土结构的抗爆模拟
- [036] 微信公众帐号开发教程第12篇-符号表情的发送(下)
- SpringMvc接收请求
- c语言 求矩阵各行元素之和
- python 使用七牛云cdn