Place詳情展示頁面可以幫助開發者便捷的展示Poi詳情信息,此外通過詳情展示頁面您還可以實現電話的撥打等功能。今天將向大家介紹Place詳情頁的具體使用方法。
第一步,創建工程,并放置基礎地圖mapview控件(詳細介紹請參考: 百度地圖SDK for Android【Demo地圖展示】 )。布局文件代碼及主程序中的代碼如下:
<!-- 放入百度地圖的mapview --> <com.baidu.mapapi.map.MapView android:id="@+id/bmapsView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true"/>
// 初始化管理對象,注意要在setContentView(R.layout.activity_main)之前初始化,否則會報錯 bMapManager = new BMapManager(getApplication()); bMapManager.init("你的key", null); setContentView(R.layout.activity_main); // 初始化mapview對象,并且設置顯示縮放控件 mapView = (MapView) findViewById(R.id.bmapsView); mapView.setBuiltInZoomControls(true); // 定義地圖控件,獲取mapview的控制,并把地圖范圍定位北京市 MapController mapController = mapView.getController(); GeoPoint point =new GeoPoint((int)(39.915* 1E6),(int)(116.404* 1E6)); mapController.setCenter(point); mapController.setZoom(12); mapController.enableClick(true); // 注意添加可點擊屬性,用于隨后的place頁面展示入口
第二步,在布局文件中添加輸入框及用于搜索的按鈕。代碼如下:
<EditText android:id="@+id/editText1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_toLeftOf="@+id/button1" android:text="餐廳" android:ems="50" > </EditText> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:text="《點擊搜索》" />
第三步,在主程序中對應的建立控件變量,用于控制所添加的控件。代碼如下:
editText = (EditText) findViewById(R.id.editText1); button = (Button) findViewById(R.id.button1); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub String key = editText.getText().toString(); if(key.equals("")) { Toast.makeText(MainActivity.this, "檢索關鍵詞不能為空!", Toast.LENGTH_SHORT).show(); } else { mkSearch.poiSearchInCity("北京", key); } } });
第四步,定義并初始化檢索變量和監聽接口。代碼如下:
MKSearchListener mkSearchListener = new MKSearchListener() { @Override public void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) { // TODO Auto-generated method stub } @Override public void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) { // TODO Auto-generated method stub } @Override public void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) { // TODO Auto-generated method stub } @Override public void onGetPoiResult(MKPoiResult arg0, int arg1, int arg2) { // TODO Auto-generated method stub // 錯誤號可參考MKEvent中的定義 if (arg2 != 0 || arg0 == null) { Toast.makeText(MainActivity.this, "抱歉,未找到結果", Toast.LENGTH_LONG).show(); return; } // 將地圖移動到第一個POI中心點 if (arg0.getCurrentNumPois() > 0) { // 將poi結果顯示到地圖上 PlacePoiOverlay poiOverlay = new PlacePoiOverlay(MainActivity.this, mapView, mkSearch); poiOverlay.setData(arg0.getAllPoi()); mapView.getOverlays().clear(); mapView.getOverlays().add(poiOverlay); mapView.refresh(); for( MKPoiInfo info : arg0.getAllPoi() ){ if ( info.pt != null ){ mapView.getController().animateTo(info.pt); break; } } } } @Override public void onGetPoiDetailSearchResult(int arg0, int arg1) { // TODO Auto-generated method stub if (arg1 != 0) { Toast.makeText(MainActivity.this, "抱歉,未找到結果", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(MainActivity.this, "成功,查看詳情頁面", Toast.LENGTH_SHORT).show(); } } @Override public void onGetDrivingRouteResult(MKDrivingRouteResult arg0, int arg1) { // TODO Auto-generated method stub } @Override public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) { // TODO Auto-generated method stub } @Override public void onGetAddrResult(MKAddrInfo arg0, int arg1) { // TODO Auto-generated method stub } };
mkSearch = new MKSearch(); mkSearch.init(bMapManager, mkSearchListener);
第五步,定義并初始化地圖點擊事件的監聽,并注冊此監聽。代碼如下:
MKMapViewListener mapListener = new MKMapViewListener() { @Override public void onMapMoveFinish() { // TODO Auto-generated method stub } @Override public void onClickMapPoi(MapPoi arg0) { // TODO Auto-generated method stub String title = ""; if (arg0 != null){ title = arg0.strText; Toast.makeText(MainActivity.this,title,Toast.LENGTH_SHORT).show(); } } };
mapView.regMapViewListener(bMapManager, mapListener);
第六步,定義繼承自PoiOverlay的類,用于顯示Place詳情頁。代碼如下:
public class PlacePoiOverlay extends PoiOverlay { MKSearch mSearch; public PlacePoiOverlay(Activity activity, MapView mapView, MKSearch search) { super(activity, mapView); mSearch = search; } @Override protected boolean onTap(int i) { super.onTap(i); MKPoiInfo info = getPoi(i); if (info.hasCaterDetails) { mSearch.poiDetailSearch(info.uid); } return true; } }
第七步,執行程序,輸入關鍵詞點擊搜索即可得到如下圖所示的結果展示界面:
第八步,點擊Poi點,即可跳轉至Place詳情展示頁面,如下圖所示:
更多詳細信息請登錄百度地圖API官方網站:
http://developer.baidu.com/map/
百度地圖API論壇:
http://bbs.lbsyun.baidu.com/
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
