最近做到项目要用到百度地图,只拿到Api的文档,还是很痛苦的,博主找了很多地方,所以这里记录一下,后续还会有关于百度地图的文章出来。
用百度地图,第一步就是配置环境,密钥之类的,这里给出网址
http://lbsyun.baidu.com/index.php?title=androidsdk/guide/key
http://lbsyun.baidu.com/index.php?title=androidsdk/guide/buildproject
这里提供一个万能的key:DD279b2a90afdf0ae7a3796787a0742e
首先我们可以抽取一个基类BaseActivity
public abstract class BaseActivity extends Activity {
private static final String TAG = "BaseActivity";
/**
* 浙江农林大学东湖校区
*/
private LatLng mZafu_donghu = new LatLng(30.2609970000,119.7355840000);
/** 天安门坐标 */
protected LatLng tamPos = new LatLng(39.915112,116.403963);
protected MapView mapView;
protected BaiduMap baiduMap;
// 这里加final是为了不让子类覆盖,原因是为了预防这里的一些类还没初始化的时候就被子类调用
@Override
protected final void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取地图控件引用
mapView = (MapView) findViewById(R.id.bmapView);
baiduMap = mapView.getMap(); // 获取地图控制器
// 1. 隐藏缩放按钮、比例尺
// mapView.showScaleControl(false); // 隐藏比例按钮,默认是显示的
// mapView.showZoomControls(false); // 隐藏缩放按钮,默认是显示的
// 2. 获取获取最小(3)、最大缩放级别(20)
float maxZoomLevel = baiduMap.getMaxZoomLevel(); // 获取地图最大缩放级别
float minZoomLevel = baiduMap.getMinZoomLevel(); // 获取地图最小缩放级别
Log.i(TAG, "minZoomLevel = " + minZoomLevel + ", maxZoomLevel" + maxZoomLevel);
// 3. 设置地图中心点为浙江农林大学
MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.newLatLng(mZafu_donghu);
baiduMap.setMapStatus(mapStatusUpdate);
// 4. 设置地图缩放为15
mapStatusUpdate = MapStatusUpdateFactory.zoomTo(15);
baiduMap.setMapStatus(mapStatusUpdate);
// 6. 获取地图Ui控制器:隐藏指南针
// UiSettings uiSettings = baiduMap.getUiSettings();
// uiSettings.setCompassEnabled(false); // 不显示指南针
init();
}
/** 这个方法让子类实现 */
public abstract void init();
/**
* 在屏幕中央显示一个Toast
* @param text
*/
public void showToast(CharSequence text) {
Utils.showToast(this, text);
}
@Override
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
mapView.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
mapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
mapView.onPause();
}
}
HelloBaiduMapActivity
public class HelloBaiduMapActivity extends BaseActivity {
private static final String TAG = "HelloBaiduMapActivity";
@Override
public void init() {
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// 5. 更新地图状态
MapStatusUpdate mapStatusUpdate = null;
switch (keyCode) {
case KeyEvent.KEYCODE_1:
// 1) 缩小
mapStatusUpdate = MapStatusUpdateFactory.zoomOut();
break;
case KeyEvent.KEYCODE_2:
// 2) 放大
mapStatusUpdate = MapStatusUpdateFactory.zoomIn();
break;
case KeyEvent.KEYCODE_3:
// 3) 旋转(0 ~ 360),每次在原来的基础上再旋转30度
MapStatus currentMapStatus = baiduMap.getMapStatus(); // 获取地图当前的状态
float rotate = currentMapStatus.rotate + 30;
Log.i(TAG, "rotate = " + rotate);
MapStatus mapStatus = new MapStatus.Builder().rotate(rotate).build();
mapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mapStatus);
break;
case KeyEvent.KEYCODE_4:
// 4) 俯仰(0 ~ -45),每次在原来的基础上再俯仰-5度
currentMapStatus = baiduMap.getMapStatus(); // 获取地图当前的状态
float overlook = currentMapStatus.overlook - 5;
Log.i(TAG, "overlook = " + overlook);
mapStatus = new MapStatus.Builder().overlook(overlook).build();
mapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mapStatus);
break;
case KeyEvent.KEYCODE_5:
// 5) 移动
mapStatusUpdate = MapStatusUpdateFactory.newLatLng(tamPos);
baiduMap.animateMapStatus(mapStatusUpdate, 2000);
return super.onKeyDown(keyCode, event);
}
baiduMap.setMapStatus(mapStatusUpdate);
return super.onKeyDown(keyCode, event);
}
}