百度地图之添加覆盖物

本文主要讲解如何实现在百度地图上添加覆盖物

1.承载数据的实体

我们从服务器返回的数据部分,最终可能是个Json数组,我们需要转换为实体集合,即下面的Info.java
我直接在实体类中声明了一个静态列表集合,模拟从服务器返回的数据Info.infos

package com.zj.map2;import java.io.Serializable;  
import java.util.ArrayList;  
import java.util.List;  public class Info implements Serializable  
{  private static final long serialVersionUID = -758459502806858414L;  /** * 精度 */  private double latitude;  /** * 纬度 */  private double longitude;  /** * 图片ID,真实项目中可能是图片路径 */  private int imgId;  /** * 商家名称 */  private String name;  /** * 距离 */  private String distance;  /** * 赞数量 */  private int zan;  public static List<Info> infos = new ArrayList<Info>();  static  {  infos.add(new Info(34.242652, 108.971171, R.drawable.a01, "英伦贵族小旅馆",  "距离209米", 1456));  infos.add(new Info(34.242952, 108.972171, R.drawable.a02, "沙井国际洗浴会所",  "距离897米", 456));  infos.add(new Info(34.242852, 108.973171, R.drawable.a03, "五环服装城",  "距离249米", 1456));  infos.add(new Info(34.242152, 108.971971, R.drawable.a04, "老米家泡馍小炒",  "距离679米", 1456));  }  public Info()  {  }  public Info(double latitude, double longitude, int imgId, String name,  String distance, int zan)  {  super();  this.latitude = latitude;  this.longitude = longitude;  this.imgId = imgId;  this.name = name;  this.distance = distance;  this.zan = zan;  }  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 getDistance()  {  return distance;  }  public void setDistance(String distance)  {  this.distance = distance;  }  public int getZan()  {  return zan;  }  public void setZan(int zan)  {  this.zan = zan;  }  }  

在地图中添加overlay

/** * 初始化图层 */  public void addInfosOverlay(List<Info> infos)  {  mBaiduMap.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) (mBaiduMap.addOverlay(overlayOptions));  Bundle bundle = new Bundle();  bundle.putSerializable("info", info);  marker.setExtraInfo(bundle);  }  // 将地图移到到最后一个经纬度位置  MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(latLng);  mBaiduMap.setMapStatus(u);  }  

为地图上的maker添加点击事件

(记得生成TextView的时候,先设置背景,再设置padding,不然可能会失效~~~)

private void initMarkerClickEvent(){// 对Marker的点击mBaiduMap.setOnMarkerClickListener(new OnMarkerClickListener(){@Overridepublic boolean onMarkerClick(final Marker marker){// 获得marker中的数据Info info = (Info) marker.getExtraInfo().get("info");InfoWindow mInfoWindow;// 生成一个TextView用户在地图中显示InfoWindowTextView location = new TextView(getApplicationContext());location.setBackgroundResource(R.drawable.location_tips);location.setPadding(30, 20, 30, 50);location.setText(info.getName());// 将marker所在的经纬度的信息转化成屏幕上的坐标final LatLng ll = marker.getPosition();Point p = mBaiduMap.getProjection().toScreenLocation(ll);p.y -= 47;LatLng llInfo = mBaiduMap.getProjection().fromScreenLocation(p);// 为弹出的InfoWindow添加点击事件//mInfoWindow=new InfoWindow(location);mInfoWindow = new InfoWindow(location, llInfo,0);location.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubmBaiduMap.hideInfoWindow();}});// 显示InfoWindowmBaiduMap.showInfoWindow(mInfoWindow);// 设置详细信息布局为可见mMarkerInfoLy.setVisibility(View.VISIBLE);// 根据商家信息为详细信息布局设置信息popupInfo(mMarkerInfoLy, info);return true;}});}

布局文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="${relativePackage}.${activityClass}" ><com.baidu.mapapi.map.MapView
        android:id="@+id/id_bmapView"android:layout_width="fill_parent"android:layout_height="fill_parent"android:clickable="true" /><RelativeLayout  android:id="@+id/id_marker_info"  android:visibility="gone"  android:layout_width="fill_parent"  android:layout_height="220dp"  android:layout_alignParentBottom="true"  android:background="#CC4e5a6b"  android:clickable="true" >  <ImageView  android:id="@+id/info_img"  android:layout_width="fill_parent"  android:layout_height="150dp"  android:layout_marginBottom="10dp"  android:layout_marginLeft="12dp"  android:layout_marginRight="12dp"  android:layout_marginTop="10dp"  android:alpha="1.0"  android:background="@drawable/map_image_border_white"  android:clickable="true"  android:scaleType="fitXY"  android:src="@drawable/a04" />  <RelativeLayout  android:layout_width="fill_parent"  android:layout_height="50dp"  android:layout_alignParentBottom="true"  android:background="@drawable/bg_map_bottom" >  <LinearLayout  android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:layout_centerVertical="true"  android:layout_marginLeft="20dp"  android:orientation="vertical" >  <TextView  android:id="@+id/info_name"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:text="老米家泡馍小炒"  android:textColor="#FFF5EB" />  <TextView  android:id="@+id/info_distance"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:text="距离200米"  android:textColor="#FFF5EB" />  </LinearLayout>  <LinearLayout  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:layout_alignParentRight="true"  android:layout_centerVertical="true"  android:layout_marginRight="20dp"  android:orientation="horizontal" >  <ImageView  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:onClick="zan"  android:src="@drawable/map_zan" />  <TextView  android:id="@+id/info_zan"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:layout_gravity="center"  android:text="652"  android:textColor="#FFF5EB" />  </LinearLayout>  </RelativeLayout>  </RelativeLayout>  </RelativeLayout>

MainActivity完整代码

package com.zj.map2;import java.util.List;import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BaiduMap.OnMapClickListener;
import com.baidu.mapapi.map.BaiduMap.OnMarkerClickListener;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.InfoWindow;
import com.baidu.mapapi.map.MapPoi;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.Marker;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.model.LatLng;import android.app.Activity;
import android.graphics.Point;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;public class MainActivity extends Activity {MapView mapView;BaiduMap mBaiduMap;// 初始化全局 bitmap 信息,不用时及时 recycleprivate BitmapDescriptor mIconMaker;private RelativeLayout mMarkerInfoLy;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);SDKInitializer.initialize(getApplicationContext());setContentView(R.layout.activity_main);mapView=(MapView) findViewById(R.id.id_bmapView);mMarkerInfoLy = (RelativeLayout) findViewById(R.id.id_marker_info);mBaiduMap=mapView.getMap();mIconMaker = BitmapDescriptorFactory.fromResource(R.drawable.maker);MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15.0f);mBaiduMap.setMapStatus(msu);initMarkerClickEvent();initMapClickEvent();}private void initMapClickEvent(){mBaiduMap.setOnMapClickListener(new OnMapClickListener(){@Overridepublic boolean onMapPoiClick(MapPoi arg0){return false;}@Overridepublic void onMapClick(LatLng arg0){mMarkerInfoLy.setVisibility(View.GONE);mBaiduMap.hideInfoWindow();}});}private void initMarkerClickEvent(){// 对Marker的点击mBaiduMap.setOnMarkerClickListener(new OnMarkerClickListener(){@Overridepublic boolean onMarkerClick(final Marker marker){// 获得marker中的数据Info info = (Info) marker.getExtraInfo().get("info");InfoWindow mInfoWindow;// 生成一个TextView用户在地图中显示InfoWindowTextView location = new TextView(getApplicationContext());location.setBackgroundResource(R.drawable.location_tips);location.setPadding(30, 20, 30, 50);location.setText(info.getName());// 将marker所在的经纬度的信息转化成屏幕上的坐标final LatLng ll = marker.getPosition();Point p = mBaiduMap.getProjection().toScreenLocation(ll);p.y -= 47;LatLng llInfo = mBaiduMap.getProjection().fromScreenLocation(p);// 为弹出的InfoWindow添加点击事件//mInfoWindow=new InfoWindow(location);mInfoWindow = new InfoWindow(location, llInfo,0);location.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubmBaiduMap.hideInfoWindow();}});// 显示InfoWindowmBaiduMap.showInfoWindow(mInfoWindow);// 设置详细信息布局为可见mMarkerInfoLy.setVisibility(View.VISIBLE);// 根据商家信息为详细信息布局设置信息popupInfo(mMarkerInfoLy, info);return true;}});}/** * 根据info为布局上的控件设置信息 *  * @param mMarkerInfo2 * @param info */  protected void popupInfo(RelativeLayout mMarkerLy, Info info)  {  ViewHolder viewHolder = null;  if (mMarkerLy.getTag() == null)  {  viewHolder = new ViewHolder();  viewHolder.infoImg = (ImageView) mMarkerLy  .findViewById(R.id.info_img);  viewHolder.infoName = (TextView) mMarkerLy  .findViewById(R.id.info_name);  viewHolder.infoDistance = (TextView) mMarkerLy  .findViewById(R.id.info_distance);  viewHolder.infoZan = (TextView) mMarkerLy  .findViewById(R.id.info_zan);  mMarkerLy.setTag(viewHolder);  }  viewHolder = (ViewHolder) mMarkerLy.getTag();  viewHolder.infoImg.setImageResource(info.getImgId());  viewHolder.infoDistance.setText(info.getDistance());  viewHolder.infoName.setText(info.getName());  viewHolder.infoZan.setText(info.getZan() + "");  }  /** * 复用弹出面板mMarkerLy的控件 *  * @author zhy *  */  private class ViewHolder  {  ImageView infoImg;  TextView infoName;  TextView infoDistance;  TextView infoZan;  }  @Overridepublic boolean onCreateOptionsMenu(Menu menu) {// TODO Auto-generated method stubgetMenuInflater().inflate(R.menu.main, menu);return super.onCreateOptionsMenu(menu);}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// TODO Auto-generated method stubswitch (item.getItemId()) {case R.id.id_menu_map_addMaker:addInfosOverlay(Info.infos);break;default:break;}return super.onOptionsItemSelected(item);}/*** 初始化图层*/public void addInfosOverlay(List<Info> infos){mBaiduMap.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) (mBaiduMap.addOverlay(overlayOptions));Bundle bundle = new Bundle();bundle.putSerializable("info", info);marker.setExtraInfo(bundle);}// 将地图移到到最后一个经纬度位置MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(latLng);mBaiduMap.setMapStatus(u);}
}

参考链接:

Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用 - Hongyang - 博客频道 - CSDN.NET

效果如下

这里写图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/494273.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

能力认证计划 -- 名企内推保 offer 直通车

CSDN 能力认证的目的&#xff1a;清晰定义工程师能力模型&#xff0c;面向开发者、技术爱好者、在校大学生等群体&#xff0c;通过机试&#xff08;真人露脸、全程录屏、限时提交&#xff09;测出应试者的真能力&#xff0c;筛选合格软件人才&#xff0c;建立应聘者与企业之间的…

fprintf 和 perror 的理解1

程序中的两种出错处理&#xff1a; 第一种: 用fprintf 2: #include <string.h> 3: #include <errno.h> 4: #include <stdlib.h> 5: 1: #include <stdio.h> 6: int main(void) 7: { 8: FILE *fp; 9: 10: if((fp fopen("1.c…

全文!《2018中国IoT报告》!

来源&#xff1a;5G9月15-18日&#xff0c;我国物联网领域规格最高、规模最大的国家级博览会——2018世界物联网博览会将在无锡举行。作为2018世界物联网博览会的重要活动之一&#xff0c;9月14日受大会组委会委托&#xff0c;中国经济信息社在无锡发布《2017-2018年中国物联网…

CSDN客户端实现

本文主要讲解实现了一个CSDN的安卓客户端&#xff0c;主要知识点如下 java爬虫获取网页数据 将java程序打包成jar包 FragmentviewpagerTabPageIndicator实现Tab效果 gestureImageView实现放大缩小图片imageLodar实现异步加载图上 XListView实现下拉刷新 java爬虫获取网页资源…

抓住金三银四的尾巴,解锁程序员面试《刷题神器》

点赞 ➕ 评论 ➕ 收藏 三连再看你最帅 刷题 不仅能掌握知识&#xff0c;快速学习进步。 更能轻松搞定面试&#xff0c;尤其是有的大厂 钟爱问算法题&#xff0c;你不刷就不会&#xff0c;就会被pass。同时&#xff0c;刷题能陶冶情操&#xff0c;避免老年痴呆 &#x1f60b; …

腾讯AI Lab开源世界首款自动化模型压缩框架PocketFlow:将深度学习装进口袋

来源&#xff1a;腾讯AI 实验室腾讯AI Lab机器学习中心今日宣布成功研发出世界上首款自动化深度学习模型压缩框架——PocketFlow&#xff0c;并即将在近期发布开源代码。这是一款面向移动端AI开发者的自动模型压缩框架&#xff0c;集成了当前主流&#xff08;包括腾讯AI Lab自研…

【拿走不谢】大数据高效查询神器--bitmap

背景 在hive中使用Roaring64Bitmap实现精确去重功能 主要目的&#xff1a; 提升 hive 中精确去重性能&#xff0c;代替hive 中的 count(distinct uuid)&#xff1b;节省 hive 存储 &#xff0c;使用 bitmap 对数据压缩 &#xff0c;减少了存储成本&#xff1b;提供在 hive 中…

Android之智能问答机器人

本文主要利用图灵机器人的接口&#xff0c;所做的一个简单的智能问答机器人 实现 由于发送与接收消息都是不同的listView&#xff0c;所以要用有两个listVeiw的布局文件 接收消息布局文件 <?xml version"1.0" encoding"utf-8"?> <LinearLa…

5张图告诉你:同样是职场人,差距怎么这么大?

点赞 ➕ 评论 ➕ 收藏 养成三连好习惯 在职场中&#xff0c;我们常常会听到各种各样的抱怨&#xff1a; &#x1f469;‍⚖️‍ 小A: 凭什么别人每次述职绩效都是优秀呀&#xff1f; 感觉TA也没干啥呀! &#x1f575; 小B: 凭啥这个事情&#xff0c;领导指派TA去对接呀&#…

史上最强阵容,BAT大佬携手AI顶级大咖齐聚上海话AI

来源&#xff1a;网易智能9月17日上午&#xff0c;齐聚各路大佬的2018世界人工智能大会在上海西岸艺术中心开幕。不得不说&#xff0c;这次大会的嘉宾阵容&#xff0c;为中国科技界史上最强&#xff0c;没有之一。今天主论坛亮相会议并发表演讲的大咖&#xff0c;除了聚集了BAT…

没错,列式存储非常牛。但是,Ta还可以更高效

很多数据仓库产品都采用了列式存储。如果数据表的总列数很多而计算涉及的列很少&#xff0c;采用列存就只读取需要的列即可&#xff0c;能够减少硬盘访问量&#xff0c;提高性能。 特别是数据量非常大时&#xff0c;硬盘扫描和读取的时间占比很大&#xff0c;这时候列存的优势…

Android实现电子邮箱客户端

本文主要讲述了安卓平台上利用QQ邮箱SMTP协议&#xff0c;POP3协议发送与接收消息的实现 发送邮件核心代码 import java.security.Security; import java.util.Date; import java.util.Properties; import javax.mail.Authenticator; import javax.mail.Message; …

谷歌AI涉足艺术、太空、外科手术,再强调AI七原则

来源&#xff1a;网易智能9月18日上午&#xff0c;Google在上海的2018世界AI 大会上举办了一场名为“AI触手可及”的主题论坛。在论坛上&#xff0c;Google全球副总裁、工程研究员Jay Yagnik 携Google 不同领域的研究者发表了演讲&#xff0c;重点阐述了Google AI在自家产品上的…

单个手指的手势识别

本文来自http://blog.csdn.net/hellogv/ &#xff0c;引用必须注明出处&#xff01; 本文把Aforge的运动识别与前面介绍的手写识别融合在一起&#xff0c;实现单个手指的手势识别。下图演示了本文代码运行的结果&#xff0c;图片有点大&#xff0c;请稍候。。。 我预先让程序学…

Apifox:满足你对 Api 的所有幻想

文章目录⌚️ 一、Api 管理的难点在哪&#xff1f;&#x1f4f1; 二、Apifox 是什么&#xff1f;&#x1f4bf; 三、接口设计 (接口文档)⌨️ 3.1 接口文档&#x1f4bb; 3.2 快速上手&#x1f5a8; 3.3 接口路径&#x1f4bd; 四、团队管理&#x1f4fd; 4.1 权限管理⏱ 4.2 项…

百度地图综合

本文主要包括百度地图API的综合应用&#xff0c;主要内容如下 地图图层展示&#xff0c;包括热力图与实时路况图 添加覆盖物&#xff0c;包括图片&#xff0c;文字&#xff0c;折线等地图控制&#xff0c;包括俯视&#xff0c;旋转&#xff0c;放大&#xff0c;缩小等定位&…

国内Api行业,可以内卷到什么程度?

随着移动应用以及智能设备爆发增长&#xff0c;同时越来越多的零售商、媒体、政府和金融服务公司开始公开Web API&#xff0c;API的使用越来越多。 现在&#xff0c;每日API调用量在不断飙升&#xff0c;早在2009年&#xff0c;Facebook每天API调用量就已经达到了50亿。如何能…

自动驾驶关键技术报告:惯性导航和背后的芯片大战

来源&#xff1a;智东西摘要&#xff1a;惯性导航将成为自动驾驶定位信息融合的中心。惯性导航系统由于具有的输出信息不间断、不受外界干扰的独特优势&#xff1b;同时可以将多种传感器的信息以及车身信息进行更深层次的融合&#xff0c;为决策层提供精确可靠的连续的车辆位置…

3D打印产业化机遇与挑战

来源&#xff1a;3D科学谷3D打印的突出特点有两个&#xff1a;免除模具以及制造成本对设计的复杂性不敏感。免除模具的特点使得3D打印适合用于产品原型、试制零件、备品备件、个性化定制、零件修复、医疗植入物、医疗导板、牙科产品、耳机产品等小批量个性化的产品。而传统制造…

Android之ExpandableListView

ExpandableListView可以用来表现多层级的listView&#xff0c;本文主要是ExpandableListView的一个简单实现 布局文件 <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"andro…