首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

百度mapSDK for Android【Demo Place详情页】

2013-02-28 
百度地图SDK for Android【Demo Place详情页】Place详情展示页面可以帮助开发者便捷的展示Poi详情信息,此外

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

        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() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubString key = editText.getText().toString();if(key.equals("")){Toast.makeText(MainActivity.this, "检索关键词不能为空!", Toast.LENGTH_SHORT).show();}else {mkSearch.poiSearchInCity("北京", key);}}});

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

MKSearchListener mkSearchListener = new MKSearchListener() {@Overridepublic void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic 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;                }                }            }            }@Overridepublic void onGetPoiDetailSearchResult(int arg0, int arg1) {// TODO Auto-generated method stubif (arg1 != 0) {                Toast.makeText(MainActivity.this, "抱歉,未找到结果", Toast.LENGTH_SHORT).show();            }            else {                Toast.makeText(MainActivity.this, "成功,查看详情页面", Toast.LENGTH_SHORT).show();            }}@Overridepublic void onGetDrivingRouteResult(MKDrivingRouteResult arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onGetAddrResult(MKAddrInfo arg0, int arg1) {// TODO Auto-generated method stub}};
mkSearch = new MKSearch();mkSearch.init(bMapManager, mkSearchListener);

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

MKMapViewListener mapListener = new MKMapViewListener() {@Overridepublic void onMapMoveFinish() {// TODO Auto-generated method stub}@Overridepublic void onClickMapPoi(MapPoi arg0) {// TODO Auto-generated method stubString 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;    }}

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

百度mapSDK for Android【Demo Place详情页】
        第八步,点击Poi点,即可跳转至Place详情展示页面,如下图所示:

百度mapSDK for Android【Demo Place详情页】


        点击下载原工程文件。


热点排行