上一篇推文,重點介紹了離線地圖的使用方法,我們可以通過快取離線地圖來滿足某些業務需求。接下來介紹在使用百度地圖時,可以和地圖有那些互動。
從這些互動中我們可以定製自己的軟體,滿足各種各樣不同客戶的需求。
與地圖的互動功能
根據百度地圖官方教程顯示,可以對地圖進行控制元件的顯示、手勢控制、事件互動、方法互動、元素壓蓋順序等。
我們重點介紹比較常見的幾個功能
1、地圖控制元件
比如指南針預設為開啟狀態,可以進行關閉,其餘的也都是類似。
UiSettings mUiSetting = mBaiduMap.getUiSettings();
//開啟指南針
mUiSetting.setCompassEnabled(true);
//地圖Logo的位置
mMapView.setLogoPosition(LogoPosition.logoPostionleftBottom);
//比例尺
//通過設定enable為true或false 選擇是否顯示比例尺
mMapView.showScaleControl(enable);
//縮放按鈕
mMapView.showZoomControls(enable);
可以通過mBaiduMap.getUisettings()來控制地圖的一些常規屬性。這個具體看官方教程就可以,介紹羅列的很清楚。
2、地圖手勢
//地圖平移
mUiSetting.setScrollGesturesEnabled(true);
//地圖縮放
mUiSetting.setZoomGesturesEnabled(true);
//地圖俯視
mUiSetting.setOverlookingGesturesEnabled(true);
//地圖旋轉
mUiSetting.setRotateGesturesEnabled(true);
//禁用所有手勢
mUiSetting.setAllGesturesEnabled(false);
//雙擊地圖中心點放大
mUiSetting.setEnlargeCenterWithDoubleClickEnable(true);
上面這兩個都是可以通過設定其狀態對應的地圖就會進行顯示,很容易就能實現。
3、地圖的事件監聽機制
下面我們來看看百度地圖的事件機制,關於事件機制百度地圖預留的介面還是很豐富的。下來我簡單對各類監聽事件進行介紹。
key驗證時間監聽、廣播監聽、地圖事件監聽 等很豐富,基本能滿足我們日常軟體對地圖控制元件的需求。
這裡重點介紹下地圖事件監聽,也是日常開發中使用頻率較高的。
SDK定義了各種地圖相關的事件監聽,提供相應的事件監聽方法,包括地圖狀態的改變,手勢事件,地圖渲染,地圖截圖等。
地圖單擊事件監聽介面
//地圖單擊事件監聽
mBaiduMap.setOnMapClickListener(new BaiduMap.OnMapClickListener(){
/**
* 地圖單擊事件回撥函式
* */
@Override
public void onMapClick(LatLng latLng) {
Toast.makeText(getApplicationContext(),"單擊位置的經緯度:"+latLng.latitude,Toast.LENGTH_SHORT);
}
/**
* 地圖內Poi單擊事件回撥函式
* */
@Override
public void onMapPoiClick(MapPoi mapPoi) {
}
});
- 地圖Marker覆蓋物點選事件監聽介面
//點選覆蓋物監聽事件
mBaiduMap.setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() {
/**
* 地圖Marker覆蓋物點選事件監聽函式
* */
@Override
public boolean onMarkerClick(Marker marker) {
//進行一些業務邏輯處理,當點選覆蓋物時,比如彈出詳細資訊等。
return false;
}
});
地圖截圖回撥介面。這個還是比較實用的,很多APP都會讓實現截圖功能。
//截圖功能回撥
mBaiduMap.snapshot(new BaiduMap.SnapshotReadyCallback() {
@Override
public void onSnapshotReady(Bitmap bitmap) {
//這裡就可以得到儲存圖片的Bitmap格式,你只需要進行儲存即可。
if (null!=bitmap){
saveBitmap("地圖截圖",bitmap,getApplicationContext());
}
}
});
/**
* Save Bitmap
*
* @param name file name
* @param bm picture to save
*/
void saveBitmap(String name, Bitmap bm, Context mContext) {
//指定我們想要儲存檔案的地址
String TargetPath = mContext.getFilesDir() + "/images/";
//判斷指定資料夾的路徑是否存在
if (!fileIsExist(TargetPath)) {
Log.d("Save Bitmap", "TargetPath isn't exist");
} else {
//如果指定資料夾建立成功,那麼我們則需要進行圖片儲存操作
File saveFile = new File(TargetPath, name);
try {
FileOutputStream saveImgOut = new FileOutputStream(saveFile);
// compress - 壓縮的意思
bm.compress(Bitmap.CompressFormat.JPEG, 80, saveImgOut);
//儲存完成後需要清除相關的程式
saveImgOut.flush();
saveImgOut.close();
Log.d("Save Bitmap", "The picture is save to your phone!");
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
boolean fileIsExist(String fileName)
{
//傳入指定的路徑,然後判斷路徑是否存在
File file=new File(fileName);
if (file.exists())
return true;
else{
//file.mkdirs() 建立資料夾的意思
return file.mkdirs();
}
}
這樣子就完成了地圖的截圖功能,很方便,也很實用。
這裡只是簡單的介紹了實現了截圖功能,官方教程中還有各種各樣的監聽事件,可以根據自己的業務需求去選擇實現。
這塊不是很難,主要是前期你把整個框架搭建起來,就很容易實現一些細節性的功能點。
今天的分享就到這裡,明天將為大家帶來在百度地圖上繪製點、線、圈等功能操作。
對了提醒大家一句,多看DEMO,它比官方文件教程強太多了。
小寄語
人生短暫,我不想去追求自己看不見的,我只想抓住我能看的見的。
原創不易,給個關注。
我是阿輝,感謝您的閱讀,如果對你有幫助,麻煩點贊、轉發 謝謝。