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元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

