百度地图SDK for Android【Demo Place详情页】

来源:互联网 发布:淘宝红包雨怎么能抢上 编辑:程序博客网 时间:2024/04/20 09:54

http://blog.csdn.net/baidulbs/article/details/8610300

Place详情展示页面可以帮助开发者便捷的展示Poi详情信息,此外通过详情展示页面您还可以实现电话的拨打等功能。今天将向大家介绍Place详情页的具体使用方法。

        第一步,创建工程,并放置基础地图mapview控件(详细介绍请参考:百度地图SDK for Android【Demo地图展示】 )。布局文件代码及主程序中的代码如下:

[html] view plaincopy
  1.   <!-- 放入百度地图的mapview -->  
  2.   <com.baidu.mapapi.map.MapView android:id="@+id/bmapsView"  
  3. android:layout_width="fill_parent"  
  4. android:layout_height="fill_parent"  
  5. android:clickable="true"/>  
[java] view plaincopy
  1. // 初始化管理对象,注意要在setContentView(R.layout.activity_main)之前初始化,否则会报错  
  2. bMapManager = new BMapManager(getApplication());  
  3. bMapManager.init("你的key"null);  
  4.   
  5. setContentView(R.layout.activity_main);  
  6.   
  7. // 初始化mapview对象,并且设置显示缩放控件  
  8. mapView = (MapView) findViewById(R.id.bmapsView);  
  9. mapView.setBuiltInZoomControls(true);  
  10.   
  11. // 定义地图控件,获取mapview的控制,并把地图范围定位北京市  
  12. MapController mapController = mapView.getController();  
  13. GeoPoint point =new GeoPoint((int)(39.915* 1E6),(int)(116.404* 1E6));  
  14. mapController.setCenter(point);  
  15. mapController.setZoom(12);  
  16. mapController.enableClick(true);  // 注意添加可点击属性,用于随后的place页面展示入口  

        第二步,在布局文件中添加输入框及用于搜索的按钮。代码如下:

[html] view plaincopy
  1. <EditText  
  2.     android:id="@+id/editText1"  
  3.     android:layout_width="wrap_content"  
  4.     android:layout_height="wrap_content"  
  5.     android:layout_alignParentLeft="true"  
  6.     android:layout_alignParentTop="true"  
  7.     android:layout_toLeftOf="@+id/button1"  
  8.     android:text="餐厅"  
  9.     android:ems="50" >  
  10. </EditText>  
  11.   
  12. <Button  
  13.     android:id="@+id/button1"  
  14.     android:layout_width="wrap_content"  
  15.     android:layout_height="wrap_content"  
  16.     android:layout_alignParentRight="true"  
  17.     android:layout_alignParentTop="true"  
  18.     android:text="《点击搜索》" />  

        第三步,在主程序中对应的建立控件变量,用于控制所添加的控件。代码如下:

[java] view plaincopy
  1. editText = (EditText) findViewById(R.id.editText1);  
  2. button = (Button) findViewById(R.id.button1);  
  3. button.setOnClickListener(new OnClickListener() {  
  4.       
  5.     @Override  
  6.     public void onClick(View v) {  
  7.         // TODO Auto-generated method stub  
  8.         String key = editText.getText().toString();  
  9.         if(key.equals(""))  
  10.         {  
  11.             Toast.makeText(MainActivity.this"检索关键词不能为空!", Toast.LENGTH_SHORT).show();  
  12.         }  
  13.         else   
  14.         {  
  15.             mkSearch.poiSearchInCity("北京", key);  
  16.         }  
  17.     }  
  18. });  

        第四步,定义并初始化检索变量和监听接口。代码如下:

[java] view plaincopy
  1. MKSearchListener mkSearchListener = new MKSearchListener() {  
  2.       
  3.     @Override  
  4.     public void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) {  
  5.         // TODO Auto-generated method stub  
  6.           
  7.     }  
  8.       
  9.     @Override  
  10.     public void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) {  
  11.         // TODO Auto-generated method stub  
  12.           
  13.     }  
  14.       
  15.     @Override  
  16.     public void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) {  
  17.         // TODO Auto-generated method stub  
  18.           
  19.     }  
  20.       
  21.     @Override  
  22.     public void onGetPoiResult(MKPoiResult arg0, int arg1, int arg2) {  
  23.         // TODO Auto-generated method stub  
  24.         // 错误号可参考MKEvent中的定义  
  25.            if (arg2 != 0 || arg0 == null) {  
  26.                Toast.makeText(MainActivity.this"抱歉,未找到结果", Toast.LENGTH_LONG).show();  
  27.                return;  
  28.            }  
  29.            // 将地图移动到第一个POI中心点  
  30.            if (arg0.getCurrentNumPois() > 0) {  
  31.                // 将poi结果显示到地图上  
  32.                PlacePoiOverlay poiOverlay = new PlacePoiOverlay(MainActivity.this, mapView, mkSearch);  
  33.                poiOverlay.setData(arg0.getAllPoi());  
  34.                mapView.getOverlays().clear();  
  35.                mapView.getOverlays().add(poiOverlay);  
  36.                mapView.refresh();  
  37.                  
  38.                for( MKPoiInfo info : arg0.getAllPoi() ){  
  39.                 if ( info.pt != null ){  
  40.                     mapView.getController().animateTo(info.pt);  
  41.                     break;  
  42.                 }  
  43.                }  
  44.            }  
  45.              
  46.     }  
  47.       
  48.     @Override  
  49.     public void onGetPoiDetailSearchResult(int arg0, int arg1) {  
  50.         // TODO Auto-generated method stub  
  51.         if (arg1 != 0) {  
  52.                Toast.makeText(MainActivity.this"抱歉,未找到结果", Toast.LENGTH_SHORT).show();  
  53.            }  
  54.            else {  
  55.                Toast.makeText(MainActivity.this"成功,查看详情页面", Toast.LENGTH_SHORT).show();  
  56.            }  
  57.     }  
  58.       
  59.     @Override  
  60.     public void onGetDrivingRouteResult(MKDrivingRouteResult arg0, int arg1) {  
  61.         // TODO Auto-generated method stub  
  62.           
  63.     }  
  64.       
  65.     @Override  
  66.     public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {  
  67.         // TODO Auto-generated method stub  
  68.           
  69.     }  
  70.       
  71.     @Override  
  72.     public void onGetAddrResult(MKAddrInfo arg0, int arg1) {  
  73.         // TODO Auto-generated method stub  
  74.           
  75.     }  
  76. };  
[java] view plaincopy
  1. mkSearch = new MKSearch();  
  2. mkSearch.init(bMapManager, mkSearchListener);  

        第五步,定义并初始化地图点击事件的监听,并注册此监听。代码如下:

[java] view plaincopy
  1. MKMapViewListener mapListener = new MKMapViewListener() {  
  2.       
  3.     @Override  
  4.     public void onMapMoveFinish() {  
  5.         // TODO Auto-generated method stub  
  6.           
  7.     }  
  8.       
  9.     @Override  
  10.     public void onClickMapPoi(MapPoi arg0) {  
  11.         // TODO Auto-generated method stub  
  12.         String title = "";  
  13.         if (arg0 != null){  
  14.             title = arg0.strText;  
  15.             Toast.makeText(MainActivity.this,title,Toast.LENGTH_SHORT).show();  
  16.         }  
  17.     }  
  18. };  
[java] view plaincopy
  1. mapView.regMapViewListener(bMapManager, mapListener);  

        第六步,定义继承自PoiOverlay的类,用于显示Place详情页。代码如下:

[java] view plaincopy
  1. public class PlacePoiOverlay extends PoiOverlay {  
  2.   
  3.     MKSearch mSearch;  
  4.   
  5.     public PlacePoiOverlay(Activity activity, MapView mapView, MKSearch search) {  
  6.         super(activity, mapView);  
  7.         mSearch = search;  
  8.     }  
  9.   
  10.     @Override  
  11.     protected boolean onTap(int i) {  
  12.         super.onTap(i);  
  13.         MKPoiInfo info = getPoi(i);  
  14.         if (info.hasCaterDetails) {  
  15.             mSearch.poiDetailSearch(info.uid);  
  16.         }  
  17.         return true;  
  18.     }  
  19. }  

        第七步,执行程序,输入关键词点击搜索即可得到如下图所示的结果展示界面:


        第八步,点击Poi点,即可跳转至Place详情展示页面,如下图所示:




        点击下载原工程文件。



更多详细信息请登录百度地图API官方网站:http://developer.baidu.com/map/
百度地图API论坛:http://bbs.lbsyun.baidu.com/



原创粉丝点击