摘要:咱們在這一章將學習到如何經過按鈕事件來控制地圖圖層(交通流量圖,衛星圖)的顯示,以及如何對android應用進行水平和垂直佈局。php
----------------------------------------------------------------------html
系列閱讀:java
一、【百度地圖-安卓SDK】從頭開始寫android程序
http://www.cnblogs.com/milkmap/archive/2011/11/25/2263475.html android
二、【「零起點」--百度地圖手機SDK】如何建立一張地圖
http://www.cnblogs.com/milkmap/archive/2012/05/11/2496526.htmlapi
三、【「零起點」--百度地圖手機SDK】如何使用離線地圖?app
http://www.cnblogs.com/milkmap/archive/2012/05/21/2511928.htmlide
-----------------------------------------------------------------------函數
1、水平和垂直佈局佈局
一、決定效果學習
咱們要添加兩個圖層按鈕,和一個地圖視圖。
將按鈕羣和地圖垂直佈局,按鈕羣內部的兩個按鈕水平佈局,以下圖:
二、找到並打開佈局的xml文件
在工程目錄-》res-》layout-》main.xml
三、而後,進行整體的佈局。
最外部的layout是vertical垂直的。
按鈕羣是horizontal水平排布的。
最後一個地圖視圖橫豎都無所謂,由於它要佔滿整個佈局。
<LinearLayout android:orientation="vertical"> <LinearLayout android:orientation="horizontal"> <Button/> <Button/> </LinearLayout> <LinearLayout android:orientation="horizontal"> <com.baidu.mapapi.MapView /> </LinearLayout> </LinearLayout>
四、main.xml文件的所有源代碼:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="100px" android:orientation="horizontal" > <!-- 圖層按鈕 --> <Button android:id="@+id/satelliteBTN" android:layout_width="150px" android:layout_height="100px" android:layout_weight="1" android:text="衛星圖" /> <Button android:id="@+id/trafficBTN" android:layout_width="150px" android:layout_height="100px" android:layout_weight="1" android:text="交通流量" /> </LinearLayout> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <!-- 地圖控件 --> <com.baidu.mapapi.MapView android:id="@+id/bmapsView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:clickable="true" > </com.baidu.mapapi.MapView> </LinearLayout> </LinearLayout>
2、地圖圖層
根據官網的開發指南,你們能夠很容易地在開發指南里找到關於圖層的代碼。
mMapView.setSatellite(true); //衛星圖mMapView.setTraffic(true); //交通流量
哈哈,實在是太簡單了!
直接添加這兩句話,可讓交通流量和衛星圖的圖層直接顯示出來。
下面咱們來添加按鈕的事件,使得點擊按鈕後,出現衛星圖,或是交通流量圖。
3、按鈕事件
以衛星圖爲例,咱們來爲按鈕添加事件。
一、在佈局xml文件中指定按鈕的id。
xml文件的位置在本文開頭已經說過了。
<Buttonandroid:id="@+id/satelliteBTN"android:layout_width="150px"android:layout_height="100px"android:layout_weight="1"android:text="衛星圖" />
二、找到主java文件
工程名-》src-》com.baidu.searchpoi-》SearchPOIActivity.java
三、申明變量
在activity裏面內先寫申明
Button satelliteBtn = null; //衛星圖按鈕
四、添加按鈕事件
在oncreate函數裏寫按鈕事件
/** 衛星圖按鈕 **/ satelliteBtn = (Button)findViewById(R.id.satelliteBTN); //指定按鈕的id OnClickListener clickListener = new OnClickListener(){ public void onClick(View v) { mMapView.setSatellite(true); //衛星圖 } }; satelliteBtn.setOnClickListener(clickListener);
五、效果
ok 運行一下。點擊衛星圖按鈕後,衛星圖就展現出來了。
六、交通流量圖
同理,能夠製做出交通流量圖。注意變量名稱不要重複,ID不要重複,事件的名稱也不要重複。
交通流量的效果圖以下:
七、java文件所有源代碼
package com.baidu.searchpoi; import android.app.Activity; import android.os.Bundle; /** 引入類 **/ import java.util.ArrayList; import java.util.List; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Point; import android.graphics.drawable.Drawable; import android.location.Location; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; import com.baidu.mapapi.BMapManager; import com.baidu.mapapi.GeoPoint; import com.baidu.mapapi.ItemizedOverlay; import com.baidu.mapapi.LocationListener; import com.baidu.mapapi.MKAddrInfo; import com.baidu.mapapi.MKDrivingRouteResult; import com.baidu.mapapi.MKGeneralListener; import com.baidu.mapapi.MKLocationManager; import com.baidu.mapapi.MKOLUpdateElement; import com.baidu.mapapi.MKOfflineMap; import com.baidu.mapapi.MKOfflineMapListener; import com.baidu.mapapi.MKPlanNode; import com.baidu.mapapi.MKPoiResult; import com.baidu.mapapi.MKSearch; import com.baidu.mapapi.MKSearchListener; import com.baidu.mapapi.MKTransitRouteResult; import com.baidu.mapapi.MKWalkingRouteResult; import com.baidu.mapapi.MapActivity; import com.baidu.mapapi.MapController; import com.baidu.mapapi.MapView; import com.baidu.mapapi.MyLocationOverlay; import com.baidu.mapapi.Overlay; import com.baidu.mapapi.OverlayItem; import com.baidu.mapapi.PoiOverlay; import com.baidu.mapapi.RouteOverlay; import com.baidu.mapapi.TransitOverlay; /** activity **/ public class SearchPOIActivity extends MapActivity { //申明變量 BMapManager mBMapMan = null; MapView mMapView = null; MKOfflineMap mOffline = null; //離線地圖變量 Button satelliteBtn = null; //衛星圖按鈕 Button trafficBtn = null; //交通流量按鈕 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mBMapMan = new BMapManager(getApplication()); mBMapMan.init("4AA2949E616E069C37CDC3152E8C401A05A0035D", null); super.initMapActivity(mBMapMan); mMapView = (MapView) findViewById(R.id.bmapsView); mMapView.setBuiltInZoomControls(true); //設置啓用內置的縮放控件 MapController mMapController = mMapView.getController(); // 獲得mMapView的控制權,能夠用它控制和驅動平移和縮放 GeoPoint point = new GeoPoint((int) (39.93 * 1E6), (int) (116.42 * 1E6)); //用給定的經緯度構造一個GeoPoint,單位是微度 (度 * 1E6) mMapController.setCenter(point); //設置地圖中心點 mMapController.setZoom(13); //設置地圖zoom級別 /** 離線地圖初始化 **/ mOffline = new MKOfflineMap(); mOffline.init(mBMapMan, new MKOfflineMapListener() { public void onGetOfflineMapState(int type, int state) { switch (type) { case MKOfflineMap.TYPE_DOWNLOAD_UPDATE: { MKOLUpdateElement update = mOffline.getUpdateInfo(state); //mText.setText(String.format("%s : %d%%", update.cityName, update.ratio)); } break; case MKOfflineMap.TYPE_NEW_OFFLINE: Log.d("OfflineDemo", String.format("add offlinemap num:%d", state)); break; case MKOfflineMap.TYPE_VER_UPDATE: Log.d("OfflineDemo", String.format("new offlinemap ver")); break; } } } ); /** 離線地圖導入離線包 **/ int num = mOffline.scan(); //if (num != 0) mText.setText(String.format("已安裝%d個離線包", num)); /** 衛星圖按鈕 **/ satelliteBtn = (Button)findViewById(R.id.satelliteBTN); //指定按鈕的id OnClickListener clickListener = new OnClickListener(){ public void onClick(View v) { mMapView.setSatellite(true); //衛星圖 } }; satelliteBtn.setOnClickListener(clickListener); /** 交通流量按鈕 **/ trafficBtn = (Button)findViewById(R.id.trafficBTN); //指定按鈕的id OnClickListener clickListener2 = new OnClickListener(){ public void onClick(View v) { mMapView.setTraffic(true); //交通流量 } }; trafficBtn.setOnClickListener(clickListener2); } @Override protected boolean isRouteDisplayed() { return false; } @Override protected void onDestroy() { if (mBMapMan != null) { mBMapMan.destroy(); mBMapMan = null; } super.onDestroy(); } @Override protected void onPause() { if (mBMapMan != null) { mBMapMan.stop(); } super.onPause(); } @Override protected void onResume() { if (mBMapMan != null) { mBMapMan.start(); } super.onResume(); } }
注意,以上代碼保留了上一章中講述的「離線地圖」。