【百度地图学习-一】初始化以及TextOverlay

一、百度地图的初始化

  主要用到三个类:

  1、BMapManager:使用地图sdk前需先初始化BMapManager.BMapManager是全局的,可为多个MapView共用,它需要地图模块创建前创建, 并在地图地图模块销毁后销毁,只要还有地图模块在使用,BMapManager就不应该销毁。它属于地图引擎管理类。

   最好在用一个自定义的继承于Application的类来依附Activity的生命周期,它有四个常用方法:

  public boolean start() //开启百度地图API
  public boolean stop() //终止百度地图API,调用此函数后,不会再发生回调
  public void destroy() //在程序退出前调用
  
 
public boolean init(java.lang.String strKey,MKGeneralListener listener)//其中的参数:
strKey - 申请的授权验证码,
listener - 注册回调事件

  
package org.hjw.hellobaidu;



import com.baidu.mapapi.BMapManager;

import com.baidu.mapapi.MKGeneralListener;

import com.baidu.mapapi.map.MKEvent;



import android.app.Application;

import android.content.Context;

import android.widget.Toast;



public class MapApplication extends Application {

        /**

         * 使用地图sdk前需先初始化BMapManager.

         * BMapManager是全局的,可为多个MapView共用,它需要地图模块创建前创建,

         * 并在地图地图模块销毁后销毁,只要还有地图模块在使用,BMapManager就不应该销毁

         */

        private static MapApplication mInstance = null;

        public  boolean m_keyRight = true;

        BMapManager bMapManager = null;//地图管理引擎

        

        public static final String mapKey = "sEtVxB4uwzTRlchScMcELXu8";



        @Override

        public void onCreate() {

            super.onCreate();

            mInstance = this;

            initMapManager(this);

        }



        private void initMapManager(Context context) {

                if(bMapManager==null){

                    bMapManager = new BMapManager(context);

                }

                if(!bMapManager.init(mapKey, new GeneralListner())){

                     Toast.makeText(MapApplication.getInstance().getApplicationContext(), 

                                "BMapManager  初始化错误!", Toast.LENGTH_LONG).show();

                }

        }

        

        public static MapApplication getInstance(){

            return mInstance;

        }

        static class GeneralListner implements MKGeneralListener{



            @Override

            public void onGetNetworkState(int arg0) {

                if(arg0 ==MKEvent.ERROR_NETWORK_CONNECT){

                     Toast.makeText(MapApplication.getInstance().getApplicationContext(), 

                                "网络出错啦!", Toast.LENGTH_LONG).show();

                }else if(arg0 ==MKEvent.ERROR_NETWORK_DATA){

                     Toast.makeText(MapApplication.getInstance().getApplicationContext(), 

                                "请输入正确的检索条件!", Toast.LENGTH_LONG).show();

                }

                

            }



            @Override

            public void onGetPermissionState(int iError) {

                if(iError!=0){

                    Toast.makeText(MapApplication.getInstance().getApplicationContext(), 

                            "请输入正确Mapkey!", Toast.LENGTH_LONG).show();

                    MapApplication.getInstance().m_keyRight=false;

                }else{

                    Toast.makeText(MapApplication.getInstance().getApplicationContext(), 

                            "MapKey认证成功!", Toast.LENGTH_LONG).show();

                    MapApplication.getInstance().m_keyRight=true;

                }

        }



        }

        

        

    

}

 

   2、MapView类:它直接继承于ViewGroup,显示地图的View,一个显示地图的视图,当被焦点选中时,它能捕获按键事件和触摸手势去平移和缩放地图。

   MapView的生命周期与Activity同步,当activity挂起时需调用MapView.onPause()。必须在setContentview后才可以使用mapView,同时也包含了对覆盖物的管理等。

 3、MapController类:它是地图控制器,通过mapView对象获得,同时也取得了对mapView的各种操作权限,包括缩放大小,显示不同类型的图等等。

 4、MKMapViewListener接口:地图显示事件监听器。 该接口监听地图显示事件,用户需要实现该接口以处理相应事件,包含下面四个方法。

{

void onClickMapPoi(MapPoi mapPoiInfo)

点击到地图可点标注时会回调此接口

void onGetCurrentMap(Bitmap b)

截图成功后会回调此接口

void onMapAnimationFinish()

动画结束时会回调此消息

void onMapLoadFinish()

在图加载完成回调

}

    void onMapMoveFinish()

    地图移动完成时会回调此接口

重写方法时,必须通过mapView对象注册监听器。

    mapView.regMapViewListener(MapApplication.getInstance().bMapManager,mkMapViewListener);// 用户注册地图监听器

 

二、文字覆盖物的实现

  分为以下几步:

1. 用TextItem准备文字数据
2. 创建TextOverlay,调用 addText(TextItem) 接口添加文字.
3. 调用MapView.getOverlays().add()方法添加overlay到mapview中。
4. 调用MapView.refresh() 使Overlay生效。

实现代码:

     TextItem textItem = new TextItem();

        textItem.fontColor = textColor1;

        //textItem.bgColor = textColor1;

        textItem.fontSize = 20;

        textItem.text = "这里是中心广场";

        textItem.pt = mapView.getMapCenter();

        TextOverlay textOverlay = new TextOverlay(mapView);

        textOverlay.addText(textItem);

        mapView.getOverlays().add(textOverlay);

        mapView.refresh();

  其中对于TextItem类中的fontColor和fontSize是必须赋值的,否则地图上面会看不到的。

  下面是效果图:

  【百度地图学习-一】初始化以及TextOverlay

那个很小的”这里是中心广场”就是覆盖物,因此需适量调整字体大小。其中TextItem中的fontSize和fontColor是必须要设置的,这是在百度sdk2.0之后才需要这样,2.0之前都是直接继承基类Overlay重写Draw方法。

还有一点就是官方提供的Demo里面,GeoPoint的初始化,参数分别为纬度和经度,Demo里面弄反了,所以可能会导致地图显示空白,只有小格子。这个问题纠结了好久。


  
   
 

 

 

你可能感兴趣的:(overlay)