Android 百度地图开发(二)
前面我們一起了解了百度地圖的申請與集成Android 百度地圖開發(fā)(一),今天我們接著來學(xué)習(xí)百度地圖。
今天主要來了解如下問題:
1.百度地圖的生命周期控制
上一篇張我們已經(jīng)在布局文件里增加了mapView對象,現(xiàn)在我們通過findViewById拿到mapView對象,可以控制mapView的生命周期,然后又可以通過mapView的getmap方法獲取到BaiduMap對象,可以對地圖進(jìn)行設(shè)置。
mapView = findViewById(R.id.mapView);mBaiduMap = mapView.getMap();在onResume ,onPause,onDestroy中分別設(shè)置MapView的生命周期
@Overrideprotected void onResume() {mapView.onResume();super.onResume();}@Overrideprotected void onPause() {mapView.onPause();super.onPause();}@Overrideprotected void onDestroy() {mLocationClient.stop();mBaiduMap.setMyLocationEnabled(false);mapView.onDestroy();mapView = null;super.onDestroy();}2.百度地圖的一些屬性設(shè)置
交通圖,熱力圖,圖層定位等,具體可看官方文檔
//開啟交通圖,可看路況情況mBaiduMap.setTrafficEnabled(true);//開啟熱力圖 // mBaiduMap.setBaiduHeatMapEnabled(true);//開啟圖層定位mBaiduMap.setMyLocationEnabled(true);mBaiduMap.setIndoorEnable(true);//打開室內(nèi)圖,默認(rèn)為關(guān)閉狀態(tài)mUisettings = mBaiduMap.getUiSettings();mUisettings.setCompassEnabled(true);//顯示指南針mBaiduMap.setOnMapClickListener(onMapClickListener);mBaiduMap.setOnMarkerClickListener(onMarkerClickListener);3.百度地圖定位以及中心位置控制
定位需要開啟GPS,打開app的位置權(quán)限,然后借助百度的BDAbstractLocationListener監(jiān)聽定位的信息,聽歌對LocationClient設(shè)置監(jiān)聽接收每次定位的位置
public class MylocationListener extends BDAbstractLocationListener {@Overridepublic void onReceiveLocation(BDLocation bdLocation) {//mapView 銷毀后不在處理新接收的位置if (bdLocation == null || mapView == null) {return;}if (isFirst) {isFirst = false;SetCenter(bdLocation.getLatitude(), bdLocation.getLongitude());}MyLocationData locData = new MyLocationData.Builder() // .accuracy(bdLocation.getRadius()) // // 此處設(shè)置獲取到的方向信息,順時針0-360 // .direction(bdLocation.getDirection()).latitude(bdLocation.getLatitude()).longitude(bdLocation.getLongitude()).build();mBaiduMap.setMyLocationData(locData);}}//初始化中心位置private void SetCenter(double lat, double lon) {LatLng cenpt = new LatLng(lat, lon); //設(shè)定中心點坐標(biāo)//圖標(biāo) 設(shè)置中心覆蓋物 // BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.mipmap.man); // // 構(gòu)建MarkerOption,用于在地圖上添加 // OverlayOptions option = new MarkerOptions().position(cenpt).icon(bitmap).draggable(true); // // 在地圖上添加Marker,并顯示 // mBaiduMap.addOverlay(option);//移動到中心點MapStatus mMapStatus = new MapStatus.Builder()//定義地圖狀態(tài).target(cenpt).zoom(16).build(); //定義Map對象StatusUpdate,以便描述地圖狀態(tài)將要發(fā)生的變化MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mMapStatus);mBaiduMap.setMapStatus(mMapStatusUpdate);//改變地圖狀態(tài)AddOverLays();}//定位private void GetLocations() {mLocationClient = new LocationClient(this);LocationClientOption option = new LocationClientOption();//開啟gpsoption.setOpenGps(true);//設(shè)置坐標(biāo)類型option.setCoorType("bd0911");//設(shè)置刷新時間option.setScanSpan(1000);mLocationClient.setLocOption(option);//注冊位置信息監(jiān)聽MylocationListener mylocationListener = new MylocationListener();mLocationClient.registerLocationListener(mylocationListener);mLocationClient.start();}4.百度地圖overlays
地圖的marker有點、線,弧線,各種面等,詳情請看http://lbsyun.baidu.com/index.php?title=androidsdk/guide/render-map/point
下面簡單的繪制一下點、線
private void AddOverLays() {//繪制點MapUtils.getInstance().DrawMarkersPoint(R.mipmap.ic_bjsj,22.532d,114.0088d,mBaiduMap);List<LatLng> points=new ArrayList<>();points.add(new LatLng(22.530d,114.0007d));points.add(new LatLng(22.551d,114.01101d));points.add(new LatLng(22.541d,114.00087d)); // 繪制線MapUtils.getInstance().DrawMarkerLine(points, Color.parseColor("#0000ff"),12,mBaiduMap);}MapUtils代碼:
package com.kty.inspection.Utils;import android.graphics.Point; import android.os.Bundle;import com.baidu.mapapi.map.BaiduMap; import com.baidu.mapapi.map.BitmapDescriptor; import com.baidu.mapapi.map.BitmapDescriptorFactory; import com.baidu.mapapi.map.MarkerOptions; import com.baidu.mapapi.map.OverlayOptions; import com.baidu.mapapi.map.PolygonOptions; import com.baidu.mapapi.map.PolylineOptions; import com.baidu.mapapi.model.LatLng;import java.util.List;/*** author : 肖波* e-mail : xiaoboabc168@163.com* date : 2019/2/22.*/public class MapUtils {private MapUtils() {}public static MapUtils getInstance() {return MapUtilsManager.instance;}public static class MapUtilsManager {private static final MapUtils instance = new MapUtils();}/*** 地圖上添加標(biāo)記點** @param drawableId 要描繪的圖片資源id* @param latitude 緯度* @param longitude 經(jīng)度* @param baiduMap 百度地圖對象*/public void DrawMarkersPoint(int drawableId, double latitude, double longitude, BaiduMap baiduMap) {if (baiduMap == null) {return;}//定義Maker坐標(biāo)點LatLng latLng = new LatLng(latitude, longitude);//構(gòu)建Marker圖標(biāo)BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(drawableId);//構(gòu)建MarkerOption,用于在地圖上添加MarkerOverlayOptions options = new MarkerOptions().position(latLng).icon(bitmap).animateType(MarkerOptions.MarkerAnimateType.jump).visible(true);//在地圖上添加Marker,并顯示baiduMap.addOverlay(options);}/*** 畫marker點* @param options OverlayOptions* @param baiduMap 地圖對象*/public void DrawMarkerPoint(OverlayOptions options,BaiduMap baiduMap){if (baiduMap==null || options==null){return;} // OverlayOptions op=new MarkerOptions().position()//位置坐標(biāo),latLng對象 // .alpha(0.8f)//透明度0-1 // .anchor(0.8f,1)//描點比例 // .animateType(MarkerOptions.MarkerAnimateType.jump)//動畫類型,none drop grow jump // .draggable(true)//是否可拖拽 // .extraInfo(new Bundle())//額外信息 // .fixedScreenPosition(new Point(40,80))//位于屏幕位置,參數(shù)坐標(biāo)點point // .flat(true)//是否平貼地圖 // .icon(BitmapDescriptorFactory.fromResource(0))//ico,BitmapDescriptor對象.icons()// // .perspective(true)//是否開啟近大遠(yuǎn)小效果 // .rotate(270)//旋轉(zhuǎn)角度 // .title("maker1")//標(biāo)題 // .visible(true);//是否顯示baiduMap.addOverlay(options);}/*** 地圖marker畫線* @param points* @param color* @param width* @param baiduMap*/public void DrawMarkerLine(List<LatLng> points,int color,int width,BaiduMap baiduMap){OverlayOptions options=new PolylineOptions().width(12).points(points).color(color);baiduMap.addOverlay(options);}}以上為今天的內(nèi)容,感謝閱讀!?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的Android 百度地图开发(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 陀螺产业区块链第九季 | 如何用区块链搭
- 下一篇: “双月”数据集的生成