最近做到項目要用到百度地圖,只拿到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);
}
}