Android 百度地圖 SDK v3_3_0 (四),androidv3_3_0

來源:互聯網
上載者:User

Android 百度地圖 SDK v3_3_0 (四),androidv3_3_0

     轉載請標明出處:http://blog.csdn.net/tanzuai/article/details/43833125

     本篇部落格要實現的功能

                 先上:

                                           

          上面就是我們最終要實現的效果

          1.首先我們來介紹下要實現的功能:

                  A.更改座標的位置

                  B.更改座標的表徵圖

                  C.刪除表徵圖

                  D.座標每隔一段時間變動一次

                  clear.覆蓋物的清楚

          2.下面我們通過執行個體,一一的解析上面的功能

             2.1首先我們初始化要用到的變數

               /** * MapView 是地圖主控制項 */private MapView mMapView;/** * 百度地圖 */private BaiduMap mBaiduMap;/** * Marker表示為標記 */private Marker mMarkerA;private Marker mMarkerB;private Marker mMarkerC;private Marker mMarkerD;//private Marker mMarkerE;/** * 資訊窗 */private InfoWindow mInfoWindow;/** *  初始化全域 bitmap 資訊,不用時及時 recycle */private BitmapDescriptor bdA;private BitmapDescriptor bdB;private BitmapDescriptor bdC;private BitmapDescriptor bdD;private BitmapDescriptor bd;private BitmapDescriptor bdGround;       /**     * 初始化布局控制項     */private void initOfflineLayout() {mMapView = (MapView) findViewById(R.id.bmapView);    mBaiduMap = mMapView.getMap();    MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(14.0f);    mBaiduMap.setMapStatus(msu);}
               2.2初始化覆蓋物,並產生覆蓋物相應的行為,最終設定地圖的狀態

       /**     * 初始化覆蓋物     */public void initOverlay() {//(LatLng表示座標位置 第一個參數為維度,第一個參數為經度)LatLng llA = new LatLng(39.963175, 116.400244);LatLng llB = new LatLng(39.942821, 116.369199);LatLng llC = new LatLng(39.939723, 116.425541);LatLng llD = new LatLng(39.906965, 116.401394);//LatLng llText = new LatLng(39.86923, 116.397428);//這裡是將表徵圖轉化為對象bdA = BitmapDescriptorFactory.fromResource(R.drawable.icon_marka);bdB = BitmapDescriptorFactory.fromResource(R.drawable.icon_markb);bdC = BitmapDescriptorFactory.fromResource(R.drawable.icon_markc);bdD = BitmapDescriptorFactory.fromResource(R.drawable.icon_markd);bd = BitmapDescriptorFactory.fromResource(R.drawable.icon_gcoding);bdGround = BitmapDescriptorFactory.fromResource(R.drawable.ground_overlay);//定義四種不同類型的覆蓋物OverlayOptions ooA = new MarkerOptions().position(llA).icon(bdA).zIndex(9).draggable(true);//OverlayOptions 地圖覆蓋物選型mMarkerA = (Marker) (mBaiduMap.addOverlay(ooA));//addOverlay在當前圖層添加覆蓋物對象OverlayOptions ooB = new MarkerOptions().position(llB).icon(bdB).zIndex(5);mMarkerB = (Marker) (mBaiduMap.addOverlay(ooB));OverlayOptions ooC = new MarkerOptions().position(llC).icon(bdC).perspective(false).anchor(0.5f, 0.5f).rotate(30).zIndex(7);mMarkerC = (Marker) (mBaiduMap.addOverlay(ooC));//將A,B,C三種座標添加到list中ArrayList<BitmapDescriptor> giflist = new ArrayList<BitmapDescriptor>();giflist.add(bdA);giflist.add(bdB);giflist.add(bdC);OverlayOptions ooD = new MarkerOptions().position(llD).icons(giflist).zIndex(0).period(10);//每隔10毫秒變動下標記(自v3.3.0版本起,SDK提供了給Marker增加動畫的能力)mMarkerD = (Marker) (mBaiduMap.addOverlay(ooD));//構建文字Option對象,用於在地圖上添加文字  //OverlayOptions textOption = new TextOptions()  //    .bgColor(0xAAFFFF00)  //    .fontSize(24)  //    .fontColor(0xFFFF00FF)  //    .text("百度地圖SDK")  //    .rotate(-30)  //    .position(llText);  ////在地圖上添加該文字對象並顯示  //mMarkerE = (Marker) (mBaiduMap.addOverlay(textOption));// add ground overlayLatLng southwest = new LatLng(39.92235, 116.380338);LatLng northeast = new LatLng(39.947246, 116.414977);LatLngBounds bounds = new LatLngBounds.Builder().include(northeast).include(southwest).build();OverlayOptions ooGround = new GroundOverlayOptions().positionFromBounds(bounds).image(bdGround).transparency(0.8f);mBaiduMap.addOverlay(ooGround);//產生變化地圖狀態MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(bounds.getCenter());//newLatLng設定地圖新中心點//設定地圖狀態mBaiduMap.setMapStatus(u);}

                 2.3設定座標和地圖的監聽事件

       /**         * 設定座標和地圖的監聽事件         */        private void initOverlayListener() {        //設定座標點擊事件        mBaiduMap.setOnMarkerClickListener(new OnMarkerClickListener() {    public boolean onMarkerClick(final Marker marker) {    Button button = new Button(getApplicationContext());    button.setBackgroundResource(R.drawable.popup);    OnInfoWindowClickListener listener = null;    if (marker == mMarkerA || marker == mMarkerD) {    button.setText("已變更位元置");    listener = new OnInfoWindowClickListener() {    public void onInfoWindowClick() {    LatLng ll = marker.getPosition();    LatLng llNew = new LatLng(ll.latitude + 0.005,    ll.longitude + 0.005);//改變座標的維度和經度    marker.setPosition(llNew);//設定座標的位置    mBaiduMap.hideInfoWindow();//隱藏訊息窗    }    };    LatLng ll = marker.getPosition();    mInfoWindow = new InfoWindow(BitmapDescriptorFactory.fromView(button), ll, -47, listener);    mBaiduMap.showInfoWindow(mInfoWindow);//顯示訊息窗    } else if (marker == mMarkerB) {    button.setText("更改表徵圖");    button.setOnClickListener(new OnClickListener() {    public void onClick(View v) {    marker.setIcon(bd);//改變座標的表徵圖    mBaiduMap.hideInfoWindow();//隱藏訊息窗    }    });    LatLng ll = marker.getPosition();    mInfoWindow = new InfoWindow(button, ll, -47);//設定訊息窗    mBaiduMap.showInfoWindow(mInfoWindow);//顯示訊息窗    } else if (marker == mMarkerC) {    button.setText("刪除");    button.setOnClickListener(new OnClickListener() {    public void onClick(View v) {    marker.remove();//刪除座標    mBaiduMap.hideInfoWindow();//隱藏訊息窗    }    });    LatLng ll = marker.getPosition();    mInfoWindow = new InfoWindow(button, ll, -47);//設定訊息窗    mBaiduMap.showInfoWindow(mInfoWindow);//顯示訊息窗    }    return true;    }    });                //地圖點擊事件        mBaiduMap.setOnMapClickListener(new OnMapClickListener() {@Overridepublic boolean onMapPoiClick(MapPoi arg0) {return false;}@Overridepublic void onMapClick(LatLng arg0) {mBaiduMap.hideInfoWindow();}});}

               2.4設定清除和重設按鈕相應的事件

/** * 清除所有Overlay *  * @param view */public void clearOverlay(View view) {mBaiduMap.clear();//清除地圖上的所有座標}/** * 重新添加Overlay *  * @param view */public void resetOverlay(View view) {clearOverlay(null);initOverlay();}

             2.5為了節省電量,設定地圖相應的生命週期(千萬要記住要在onDestroy()方法裡面把bitmap資源回收)

@Overrideprotected void onPause() {// MapView的生命週期與Activity同步,當activity掛起時需調用MapView.onPause()mMapView.onPause();super.onPause();}@Overrideprotected void onResume() {// MapView的生命週期與Activity同步,當activity恢複時需調用MapView.onResume()mMapView.onResume();super.onResume();}@Overrideprotected void onDestroy() {// MapView的生命週期與Activity同步,當activity銷毀時需調用MapView.destroy()mMapView.onDestroy();super.onDestroy();// 回收 bitmap 資源bdA.recycle();bdB.recycle();bdC.recycle();bdD.recycle();bd.recycle();bdGround.recycle();}

               好了!介紹完畢!是不是覺得很簡單!

               下面為本篇部落格的源碼:

                           源碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.