百度地图学习总结(4)—添加覆盖物
来源:互联网 发布:wet n wild靠谱淘宝店 编辑:程序博客网 时间:2024/06/06 01:05
0.前言:
上篇讲了定位
这篇我们来讲如何添加覆盖物。
先看效果图:本文就是要实现这么一个效果图:
1.模拟数据传入并生成覆盖物:
/*** * 初始化图层 * 这一段代码一旦执行,地图上就出现了所传入的覆盖物信息 * @param infos 模拟数据,覆盖物的点 */ 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()); // 覆盖物的图标 BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.mipmap.map_pos_icon); overlayOptions = new MarkerOptions().position(latLng).icon(bitmap).zIndex(5); marker = (Marker) (mBaiduMap.addOverlay(overlayOptions));//core //为marker带上数据 Bundle bundle = new Bundle(); bundle.putSerializable("info", info); marker.setExtraInfo(bundle); }// // 可选操作 将地图移到到最后一个经纬度位置 MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(latLng); mBaiduMap.setMapStatus(u); }
Info是封装了经纬度等扩展信息的的一个实体类。我将其设置进一个按钮的点击事件,一点击该按钮就触发这个方法用于模拟服务器拉取到的数据,执行完成后地图上应该就添上了若干个覆盖物了。具体的可以看demo内的代码。
2.marker的点击事件:
先来个原生态的,这样方便理解。
mBaiduMap.setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() { @Override public boolean onMarkerClick(final Marker marker) { Log.e("marker click"," marker >> " + marker.getId()); return true; } });
没啥可说的,注意API就行了,就是注意他这个是用mBaiduMap这个对象对整张地图的marker进行点击的设置。一旦设置,全图生效。
然后我们看在添加覆盖物的时候,我们为覆盖物都设置了一个bundle数据——info。那么我们来改造下。
mBaiduMap.setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() { @Override public boolean onMarkerClick(final Marker marker) {// Log.e("marker click"," marker >> " + marker.getId()); Bundle extraInfo = marker.getExtraInfo(); Info info = (Info) extraInfo.getSerializable("info"); String name = info.getName(); Log.e("marker click"," name >> " + name); return true; } });
Log输出:我们把marker携带的数据给取出来,并打印出了名字。
11-20 11:13:18.371 32645-32645/zj.shitmap E/marker click: name >> 老米家泡馍小炒11-20 11:13:19.107 32645-32645/zj.shitmap E/marker click: name >> 老米家泡馍小炒11-20 11:13:22.701 32645-32645/zj.shitmap E/marker click: name >> 沙井国际洗浴会所11-20 11:13:26.035 32645-32645/zj.shitmap E/marker click: name >> 英伦贵族小旅馆11-20 11:13:28.890 32645-32645/zj.shitmap E/marker click: name >> 五环服装城
从上而知,既然marker能携带数据,那么我们便可以以此为支点,做很多事情。比如弹出一个底部详情布局(利用marker携带的数据),也可以弹出一个infoWindow。
基于熟悉api和控件的考虑,我们利用marker的点击来弹出一个infoWindow吧。
3.InfoWindow:
核心代码:
/** * 显示infoWindow */ mBaiduMap.hideInfoWindow(); InfoWindow.OnInfoWindowClickListener listener = new InfoWindow.OnInfoWindowClickListener() { @Override public void onInfoWindowClick() { Log.e("marker click"," 点击Marker >> "); } }; RelativeLayout fathersRootView = (RelativeLayout) findViewById(R.id.activity_main); RelativeLayout popupCommonClickRelativeLayout = (RelativeLayout) LayoutInflater.from(getBaseContext()) .inflate(R.layout.map_infowindow_common, fathersRootView, false); TextView subText = (TextView) popupCommonClickRelativeLayout.findViewById(R.id.infowindow_common_click_name); subText.setText(name); InfoWindow window = new InfoWindow(BitmapDescriptorFactory.fromView(popupCommonClickRelativeLayout), marker.getPosition(), -100, listener); mBaiduMap.showInfoWindow(window);
注意在设置infoWindow的textView信息,必须要在addInfoWindow之前。否则设置不生效。
且这段代码时写在marker的点击事件内的,所以一点击的时候,将数据拿出来,设置到infoWindow所依赖的view上边,然后再将该View加入到infoWwindow。
4.最后附上Demo:
demo下载
阅读全文
0 0
- 百度地图学习总结(4)—添加覆盖物
- 百度地图添加覆盖物
- Android--百度地图学习(第三章)如何给地图添加多个覆盖物
- Android 百度地图(二)——地图切换、定位、添加覆盖物、搜索位置、连线
- Android 百度地图定位、添加覆盖物()
- 百度地图:添加覆盖物(描点)
- 百度地图之添加覆盖物
- 百度地图之添加覆盖物
- 222.map4-百度地图添加覆盖物
- 百度地图之添加覆盖物
- android 百度地图标注覆盖物学习
- android 百度地图标注覆盖物学习
- 百度地图的添加覆盖物marker和InfoWindow总结,自定义标签
- Android 百度地图频繁添加覆盖物后刷新出现地图闪烁问题(个人)
- 百度地图覆盖物
- 百度地图覆盖物
- 百度地图----地图覆盖物
- 百度地图API如何给自定义覆盖物添加事件
- 安卓学习笔记(10)-自定义弹出式对话框
- 设计模式(二)——策略模式
- 分割整数(循环结构)
- “天龙八步”细说浏览器输入URL后发生了什么
- 数塔问题(Hdu_oj2084)DP
- 百度地图学习总结(4)—添加覆盖物
- 常用算法之-回溯法
- 逆置整数
- 数据库中的内连接、自然连接、外连接
- 安卓学习笔记(11)-Json格式数据打包
- Thread.join()详解
- 进制转化模板
- Codeforces Round #446 (Div. 2) C. Pride (贪心 数论)
- jsvascript === 和==的区别