百度地图覆盖物Marker与infoWindow的使用
来源:互联网 发布:淘宝化妆品名称大全 编辑:程序博客网 时间:2024/04/30 20:04
参考博客: http://blog.csdn.net/lmj623565791/article/details/37737213
对于Marker覆盖物与infoWindow的使用.
首先对于Marker的展现于infowindow的展现,需要从服务器后台中获取到
信息,包括: 经纬度,距离,商家名称,图片信息等.
然后构造成Marker对象显示在百度地图中.
当我们点击Marker覆盖物的时候,弹出InfoWindow窗口.
当我们点击InfoWindow窗口之时,处理事件,使窗口消失.
当我们点击地图之时,让所有的InfoWindow消失.
主要是处理一些监听事件:
OnMarkerClickListener, OnMapClickListener, OnInfoWindowClickListener
当我们处理覆盖物的事件时,不仅显示InfoWindow信息,而且将底部隐藏的布局显示出来.
模拟后台提供的数据:
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, "英伦贵族小旅�?", "距离2090", 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; }}
然后,触发事件,将经纬度的信息添加到百度的图层:
//添加图层 public void addInfoOverlay(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(mMarker).zIndex(5); /** * 迭代向地图中添加商家的信息 */ marker = (Marker) (baiduMap.addOverlay(overlayOptions)); //当图标点击时弹出的附加信息 Bundle bundle = new Bundle(); bundle.putSerializable("info", info); marker.setExtraInfo(bundle); } // 将地图移到到最后一个经纬度位置 MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(latLng); baiduMap.setMapStatus(u); }
于此,我们可以在百度地图上看见很多的Marker展现在地图上.
然后我们需要处理一下地图Marker的点击事件,来展现我们的InfoWindow上的信息.
/* * 百度图标的点击事件 */ public void InitMarkClick(){ //设置当点击百度图标的时候,显示响应的文本信息 baiduMap.setOnMarkerClickListener(new OnMarkerClickListener() { @Override public boolean onMarkerClick(Marker marker) { Info info=(Info) marker.getExtraInfo().getSerializable("info"); //信息窗口 InfoWindow infowindow=null; //设置信息窗口设置的文字 TextView view=new TextView(getApplicationContext()); view.setBackgroundResource(R.drawable.location_tips); view.setPadding(30,20, 30,50); view.setText(info.getName()); //从marker中获取经纬度的信息来转化成屏幕的坐标 LatLng ll=marker.getPosition(); Point p=baiduMap.getProjection().toScreenLocation(ll); p.y-=47; LatLng llinfo=baiduMap.getProjection().fromScreenLocation(p); //生成信息窗口 infowindow=new InfoWindow(view, llinfo, new OnInfoWindowClickListener() { @Override public void onInfoWindowClick() { //隐藏消息窗口 baiduMap.hideInfoWindow(); } }); //将信息窗口显示出来 baiduMap.showInfoWindow(infowindow); ///将布局显示出来用来显示具体的内容 layout.setVisibility(View.VISIBLE); //将信息设置进布局文件 popupInfo(layout,info); return true; } }); }
当我们点击Marker上的信息时,会出现底部的相对布局来展现具体的内容.
private void popupInfo(RelativeLayout layout, Info info) { ViewHolder holder=null; if(layout.getTag()==null){ holder=new ViewHolder(); holder.info_img=(ImageView) layout.findViewById(R.id.info_img); holder.info_name=(TextView) layout.findViewById(R.id.info_name); holder.info_distance=(TextView) layout.findViewById(R.id.info_distance); holder.zan_count=(TextView) layout.findViewById(R.id.zan_count); layout.setTag(holder); } /* * 设置数据 */ holder.info_img.setImageResource(info.getImgId()); holder.info_name.setText(info.getName()); holder.info_distance.setText(info.getDistance()); holder.zan_count.setText(info.getZan()+""); } class ViewHolder{ public ImageView info_img; public TextView info_name; public TextView info_distance; public TextView zan_count; }
最后,当我们点击百度地图的时候,将Infowindow消失掉,并且将布局消失掉.
/* * 百度地图点击事件将InfoWindow隐藏 */ private void InitMapClick() { baiduMap.setOnMapClickListener(new OnMapClickListener() { @Override public boolean onMapPoiClick(MapPoi arg0) { // TODO Auto-generated method stub return false; } @Override public void onMapClick(LatLng arg0) { layout.setVisibility(View.GONE); baiduMap.hideInfoWindow(); } }); }
1 0
- 百度地图覆盖物Marker与infoWindow的使用
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
- 【百度地图】 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
- BaiduMap---百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
- android百度地图 添加覆盖物Marker与InfoWindow的使用
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
- HDU--2010
- ViewPager做轮播图时:The specified child already has a parent. You must
- XCode中连接使用GitHub
- 雅阁笔迹之windows编程——在一个进程中打开另外的进程
- Android异步消息处理机制详解及源码分析
- 百度地图覆盖物Marker与infoWindow的使用
- Widows下php的Redis配置
- UIButton - iOS - UI基础知识总结5
- 三角形问题
- AS3五子棋设计
- Building and Installing ACE on UNIX
- windows中使用Git工具连接GitHub(配置篇)
- Scala 强大的集合数据操作示例
- AngularJS Argument 'customersController' is not a function, got undefined,errors.angularjs.org/1.3.1