<Android 应用 之路> 百度地图API使用(3)
前言
上一篇讲解并实践了百度地图基本显示,地图类型,实时交通图,热力图,地图控制和手势控制,今天看下在地图上添加view和覆盖物。
地图Logo不允许遮挡,可通过mBaiduMap.setPadding(paddingLeft, paddingTop, paddingRight, paddingBottom);方法可以设置地图边界区域,来避免UI遮挡。
其中参数paddingLeft、paddingTop、paddingRight、paddingBottom参数表示距离屏幕边框的左、上、右、下边距的距离,单位为屏幕坐标的像素密度。—————–>利用这个来添加自定义的内容
- 标注覆盖物
- 几何图形覆盖物
- 文字覆盖物
- 弹出窗覆盖物
内容
地图上添加View
由于地图的Logo不允许被遮挡,百度自然会想办法针对一些开发者场景作出自己的调整,比如上面所说的setPadding()或者setViewPadding()一样好使,具体的使用分为两步:
第一步,
mBaiduMap.setPadding(0, 0, 0, 200);
第二步,
private void addView() {
TextView textView = new TextView(this);
textView.setText("这是用户自定义的View,这个时候logo和底部的一些内容会向上移动,因为MapView设置了底部Padding");
textView.setBackgroundResource(R.color.colorPrimary); //创建一个TextView然后往底部放置,官方Demo如是操作
MapViewLayoutParams.Builder builder = new MapViewLayoutParams.Builder();
builder.layoutMode(MapViewLayoutParams.ELayoutMode.absoluteMode);
builder.width(bmapView.getWidth());
builder.height(200);
builder.point(new Point(0, bmapView.getHeight()));
builder.align(MapViewLayoutParams.ALIGN_LEFT, MapViewLayoutParams.ALIGN_BOTTOM);
bmapView.addView(textView, builder.build());
}
这样子就在底部添加了一个TextView,当然想添加其他的View自然也是可行的,具体效果图往下看。
地理编码,标注覆盖物和弹出窗覆盖物
利用标注覆盖物在地图上的特定位置添加标注,然后给标注覆盖物设置点击监听展示弹出覆盖物
//这个是“打点”按钮的点击事件,点击事件发生后,地理编码对象执行Address->location的解析,解析结果返回之后,拿到对应的点的经纬度,也就是LatLng实例和对应的地址信息,然后执行addMarker操作
private void addPointByEditText() {
String placename = etPoint.getText().toString();
final GeoCoder geo = GeoCoder.newInstance();
geo.setOnGetGeoCodeResultListener(new OnGetGeoCoderResultListener() {
@Override
public void onGetGeoCodeResult(GeoCodeResult geoCodeResult) {
if (geoCodeResult.getLocation() != null) {
addMarker(geoCodeResult.getLocation() , geoCodeResult.getAddress());
//addText(geoCodeResult.getLocation(), "看过来 :" + geoCodeResult.getAddress());//这个是后面添加文字覆盖物的时候使用到的
} else {
Toast.makeText(MainActivity.this, " No Result of GeoCoder! Sorry", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onGetReverseGeoCodeResult(ReverseGeoCodeResult reverseGeoCodeResult) {
}
});
geo.geocode(new GeoCodeOption().address(placename).city(placename));
}
......
//添加标注物
private void addMarker(LatLng point, String address) {
//定义Maker坐标点
//LatLng point = new LatLng(39.963175, 116.400244);
//构建MarkerOption,用于在地图上添加Marker
Bundle bundle = new Bundle();
bundle.putParcelable("LATLNG", point);//传递Bundle对象,方便后面读取对应的info来创建pop window
bundle.putString("ADDRESS", address);
OverlayOptions option = new MarkerOptions()
.position(point)
.icon(bitmap).extraInfo(bundle);
//在地图上添加Marker,并显示
mBaiduMap.addOverlay(option);
}
//设置标注覆盖物的点击事件监听
mBaiduMap.setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
//这里是MarkerOption创建的时候传入的点坐标和对应的地址信息
if (marker.getExtraInfo() != null) {
LatLng point = marker.getExtraInfo().getParcelable("LATLNG");
String address = marker.getExtraInfo().getString("ADDRESS");
addPop(point, address);
}
return false;
}
});
......
//添加弹出窗覆盖物
private void addPop(LatLng point, String message) {
//创建InfoWindow展示的view
Button button = new Button(getApplicationContext());
button.setBackgroundResource(R.drawable.marker_info_bg);
button.setTextColor(Color.WHITE);
button.setText(message);
//创建InfoWindow , 传入 view, 地理坐标, y 轴偏移量
InfoWindow mInfoWindow = new InfoWindow(button, point, -47);
//显示InfoWindow
mBaiduMap.showInfoWindow(mInfoWindow);
}
实际效果图:
文字覆盖物
文字覆盖物主要就是在地图上添加一些字串, 用上面的代码,将标注覆盖物改成文字覆盖物
//设置文字覆盖物
private void addText(LatLng point, String message) {
//构建文字Option对象,用于在地图上添加文字
OverlayOptions textOption = new TextOptions()
.bgColor(0xAAFFFF00)
.fontSize(35)
.fontColor(0xFFFF00FF)
.text(message)
.rotate(-30)
.position(point);
//在地图上添加该文字对象并显示
mBaiduMap.addOverlay(textOption);
}
实际效果图:
行政区边界搜索和多边形覆盖物
利用DistrictSearch和PolyOverlay,实现圈出行政区域的效果
mDistrictSearch = DistrictSearch.newInstance();//创建行政区域查询的实例
......
//添加多边形区域
private void addPoly(String cityname) {
//建立搜索条件
DistrictSearchOption option = new DistrictSearchOption().cityName(cityname).districtName(cityname);
//设置搜索监听事件
mDistrictSearch.setOnDistrictSearchListener(new OnGetDistricSearchResultListener() {
@Override
public void onGetDistrictResult(DistrictResult districtResult) {
if (districtResult.error == SearchResult.ERRORNO.NO_ERROR) {
List<List<LatLng>> pointsList = districtResult.getPolylines();
if (pointsList == null) return;
//地理边界对象
LatLngBounds.Builder builder = new LatLngBounds.Builder();
for (List<LatLng> polyline : pointsList) {
OverlayOptions ooPolyline11 = new PolylineOptions().width(10)
.points(polyline).dottedLine(true).color(Color.RED);
mBaiduMap.addOverlay(ooPolyline11);//添加OverLay
OverlayOptions ooPolygon = new PolygonOptions().points(polyline)
.stroke(new Stroke(5, 0xAA00FF88)).fillColor(0xAAFFFF00);
mBaiduMap.addOverlay(ooPolygon);//添加OverLay
for (LatLng latLng : polyline) {
builder.include(latLng);//包含这些点
}
}
}
}
});
mDistrictSearch.searchDistrict(option);//执行行政区域的搜索
}
实际效果图:
备注
今天先看到这里,有时间接着跟~
<Android 应用 之路> 百度地图API使用(3)的更多相关文章
- <Android 应用 之路> 百度地图API使用(2)
简介 上一篇只是大致的提一下百度地图API的Android SDK的基本内容,然后抄袭一个官网上的Demo,今天看一下百度地图的第一部分,地图类型和基本的显示. 简单实战 不同类型地图的显示 //设置 ...
- <Android 应用 之路> 百度地图API使用(4)
前言 百度地图的定位功能和基础地图功能是分开的,使用的是另外的jar包和so库文件,详情请关注官网: 百度定位SDK 配置 下载对应的jar包和so库,然后移动到lib目录下 AS中注意事项 sour ...
- <Android 应用 之路> 百度地图API使用(1)
简介 详情请看百度地图官方网站 http://lbsyun.baidu.com/index.php?title=androidsdk/guide/introduction 使用方式 申请密钥,针对移动 ...
- Android应用中使用百度地图API并加入标注(一)
网上一些资料这样的的内容已经过时了,这里是最新的内容,假设哪里不正确,请吐槽... 1)下载百度地图移动版API(Android)开发包 要在Android应用中使用百度地图API,就须要 ...
- Android应用中使用百度地图API定位自己的位置(二)
官方文档:http://developer.baidu.com/map/sdkandev-6.htm#.E7.AE.80.E4.BB.8B3 百度地图SDK为开发人员们提供了例如以下类型的地图覆盖物: ...
- 我的Android开发之路——百度地图开源工具获取定位信息
定位技术在现在的移动设备上是必不可少的,许多app都会使用定位功能. 通常定位方式有两种:GPS定位:网络定位. Android系统对这两种定位方式都提供了相应的API支持,但是因为google的网络 ...
- Android应用中使用百度地图API之POI(三)
先看执行后的图吧: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWFqaWFuamll/font/5a6L5L2T/fontsize/400/fill/ ...
- Android端百度地图API使用详解
百度地图API简介 百度地图移动版API(Android)是一套基于Android设备的应用程序接口,通过该接口,可以轻松的访问百度服务和数据,构建功能丰富.交互性强的地图应用程序. 百度地图移动版A ...
- Android 百度地图API 定位 导航
看看这个利用百度地图定位并实现目的地导航的Demo. 首先看实现效果: 进 入后首先会得到当前位置,在地图上显示出来.在输入框中输入目的地后,就会在地 ...
随机推荐
- JavaScript DOM编程艺术 笔记(二)语句操作
操作 var total = (1+4)*5; year = year +1; year++; var message = "i am" + "girl"; 是 ...
- 在Keras中使用tensorboard可视化acc等曲线
1.使用tensorboard可视化ACC,loss等曲线 keras.callbacks.TensorBoard(log_dir='./Graph', histogram_freq= 0 , wri ...
- BZOJ - 3263 三维偏序
题意:定义元素为有序组(a,b,c),若存在x组(a_i,b_i,c_i)分别小于等于(a,b,c),则该元素的等级为x,求[0,n-1]等级的个数 cdq分治练手题,对a简单排序并去重,对b进行分治 ...
- 让windows登陆界面显示administrator账户
如果windowsXP只有一个administrator账户,在开机登陆windows的欢迎界面,会出现这个账户名,点击,输入密码就可登陆到windows桌面: 如果新建了另一个管理员账户,在欢迎界面 ...
- java转pdf(html转为pdf),解决中文乱码,标签不规范等问题
第一步,下载jar包以及建对应的文件夹.注意pd4ml的jar要选择pro版本.然后建一个pd4fonts.properties 里面对应的字体. SimSun = simsun.ttf 前面为变量名 ...
- 【OpenCV-Python】-图像形态学转化
原文为段立辉翻译,感谢Linux公社此文档为自学转述,如有侵权请联系本人. 目标: • 学习不同的形态学操作,例如腐蚀,膨胀,开运算,闭运算等 • 学习的函数有:cv2.erode(),cv2.dil ...
- greenplum表的distributed key值查看
greenplum属于分布式的数据库,MPP+Share nothing的体系,查询的效率很快.不过,这是建立在数据分散均匀的基础上的.如果DK值设置不合理的话,完全有可能出现所有数据落在单个节点上的 ...
- MyBatis整合Spring详细教程
1整合思路 1.SqlSessionFactory对象应该放到spring容器中作为单例存在. 2.传统dao的开发方式中,应该从spring容器中获得sqlsession对象. 3.Mapper代理 ...
- 【Javascript】 DOM节点
HTML文档中一切都是节点! 整个文档是文档节点: 注释是注释节点: 每一个HTML元素都是一个元素节点: 元素内的文本内容是文本节点: 连元素的每一个属性都是一个属性节点. 看到这些是不是感觉很熟悉 ...
- Redis的安装(CentOS 7下)
redis的官网,www.redis.io 1. 先下载 redis: wget http://download.redis.io/releases/redis-3.0.3.tar.gz 2. 解压: ...