android百度地图:ItemizedOverlay

来源:互联网 发布:医疗数据采集平台 编辑:程序博客网 时间:2024/05/01 21:50
public class OverlayDemo extends Activity {/** *  MapView 是地图主控件 */private MapView mMapView = null;/** *  用MapController完成地图控制  */private MapController mMapController = null;private MyOverlay mOverlay = null;private PopupOverlay   pop  = null;private ArrayList<OverlayItem>  mItems = null; private TextView  popupText = null;private View viewCache = null;private View popupInfo = null;private View popupLeft = null;private View popupRight = null;private Button button = null;private MapView.LayoutParams layoutParam = null;private OverlayItem mCurItem = null;/** * overlay 位置坐标 */double mLon1 = 116.400244 ;double mLat1 = 39.963175 ;double mLon2 = 116.369199;double mLat2 = 39.942821;double mLon3 = 116.425541;double mLat3 = 39.939723;double mLon4 = 116.401394;double mLat4 = 39.906965;double mLon5 = 116.402096;double mLat5 = 39.942057;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        /**         * 使用地图sdk前需先初始化BMapManager.         * BMapManager是全局的,可为多个MapView共用,它需要地图模块创建前创建,         * 并在地图地图模块销毁后销毁,只要还有地图模块在使用,BMapManager就不应该销毁         */        DemoApplication app = (DemoApplication)this.getApplication();        if (app.mBMapManager == null) {            app.mBMapManager = new BMapManager(this);            /**             * 如果BMapManager没有初始化则初始化BMapManager             */            app.mBMapManager.init(DemoApplication.strKey,new DemoApplication.MyGeneralListener());        }        /**          * 由于MapView在setContentView()中初始化,所以它需要在BMapManager初始化之后          */        setContentView(R.layout.activity_overlay);        mMapView = (MapView)findViewById(R.id.bmapView);        /**         * 获取地图控制器         */        mMapController = mMapView.getController();        /**         *  设置地图是否响应点击事件  .         */        mMapController.enableClick(true);        /**         * 设置地图缩放级别         */        mMapController.setZoom(14);        /**         * 显示内置缩放控件         */        mMapView.setBuiltInZoomControls(true);                initOverlay();               /**         * 设定地图中心点         */        GeoPoint p = new GeoPoint((int)(mLat5 * 1E6), (int)(mLon5* 1E6));        mMapController.setCenter(p);    }       public void initOverlay(){    /**     * 创建自定义overlay     */         mOverlay = new MyOverlay(getResources().getDrawable(R.drawable.icon_marka),mMapView);         /**          * 准备overlay 数据          */         GeoPoint p1 = new GeoPoint ((int)(mLat1*1E6),(int)(mLon1*1E6));         OverlayItem item1 = new OverlayItem(p1,"覆盖物1","");         /**          * 设置overlay图标,如不设置,则使用创建ItemizedOverlay时的默认图标.          */         item1.setMarker(getResources().getDrawable(R.drawable.icon_marka));                  GeoPoint p2 = new GeoPoint ((int)(mLat2*1E6),(int)(mLon2*1E6));         OverlayItem item2 = new OverlayItem(p2,"覆盖物2","");         item2.setMarker(getResources().getDrawable(R.drawable.icon_markb));                  GeoPoint p3 = new GeoPoint ((int)(mLat3*1E6),(int)(mLon3*1E6));         OverlayItem item3 = new OverlayItem(p3,"覆盖物3","");         item3.setMarker(getResources().getDrawable(R.drawable.icon_markc));                  GeoPoint p4 = new GeoPoint ((int)(mLat4*1E6),(int)(mLon4*1E6));         OverlayItem item4 = new OverlayItem(p4,"覆盖物4","");         item4.setMarker(getResources().getDrawable(R.drawable.icon_markd));                  GeoPoint p5 = new GeoPoint ((int)(mLat5*1E6),(int)(mLon5*1E6));         OverlayItem item5 = new OverlayItem(p5,"覆盖物5","");         item5.setMarker(getResources().getDrawable(R.drawable.icon_gcoding));         /**          * 将item 添加到overlay中          * 注意: 同一个itme只能add一次          */         mOverlay.addItem(item1);         mOverlay.addItem(item2);         mOverlay.addItem(item3);         mOverlay.addItem(item4);         mOverlay.addItem(item5);         /**          * 保存所有item,以便overlay在reset后重新添加          */         mItems = new ArrayList<OverlayItem>();         mItems.addAll(mOverlay.getAllItem());         /**          * 将overlay 添加至MapView中          */         mMapView.getOverlays().add(mOverlay);         /**          * 刷新地图          */         mMapView.refresh();                  /**          * 向地图添加自定义View.          */                          viewCache = getLayoutInflater().inflate(R.layout.custom_text_view, null);         popupInfo = (View) viewCache.findViewById(R.id.popinfo);         popupLeft = (View) viewCache.findViewById(R.id.popleft);         popupRight = (View) viewCache.findViewById(R.id.popright);         popupText =(TextView) viewCache.findViewById(R.id.textcache);                  button = new Button(this);         button.setBackgroundResource(R.drawable.popup);                /**          * 创建一个popupoverlay          */         PopupClickListener popListener = new PopupClickListener(){@Overridepublic void onClickedPopup(int index) {if ( index == 0){//更新item位置      pop.hidePop();            GeoPoint p = new GeoPoint(mCurItem.getPoint().getLatitudeE6()+5000,      mCurItem.getPoint().getLongitudeE6()+5000);      mCurItem.setGeoPoint(p);      mOverlay.updateItem(mCurItem);      mMapView.refresh();}else if(index == 2){//更新图标mCurItem.setMarker(getResources().getDrawable(R.drawable.nav_turn_via_1));mOverlay.updateItem(mCurItem);    mMapView.refresh();}}         };         pop = new PopupOverlay(mMapView,popListener);                      }    /**     * 清除所有Overlay     * @param view     */    public void clearOverlay(View view){    mOverlay.removeAll();    if (pop != null){            pop.hidePop();    }    mMapView.removeView(button);    mMapView.refresh();    }    /**     * 重新添加Overlay     * @param view     */public void resetOverlay(View view){    clearOverlay(null);    //重新add overlay    mOverlay.addItem(mItems);    mMapView.refresh();    }       @Override    protected void onPause() {    /**     *  MapView的生命周期与Activity同步,当activity挂起时需调用MapView.onPause()     */        mMapView.onPause();        super.onPause();    }        @Override    protected void onResume() {    /**     *  MapView的生命周期与Activity同步,当activity恢复时需调用MapView.onResume()     */        mMapView.onResume();        super.onResume();    }        @Override    protected void onDestroy() {    /**     *  MapView的生命周期与Activity同步,当activity销毁时需调用MapView.destroy()     */        mMapView.destroy();        super.onDestroy();    }        @Override    protected void onSaveInstanceState(Bundle outState) {    super.onSaveInstanceState(outState);    mMapView.onSaveInstanceState(outState);        }        @Override    protected void onRestoreInstanceState(Bundle savedInstanceState) {    super.onRestoreInstanceState(savedInstanceState);    mMapView.onRestoreInstanceState(savedInstanceState);    }        public class MyOverlay extends ItemizedOverlay{public MyOverlay(Drawable defaultMarker, MapView mapView) {super(defaultMarker, mapView);}@Overridepublic boolean onTap(int index){OverlayItem item = getItem(index);mCurItem = item ;if (index == 4){         button.setText("这是一个系统控件");         GeoPoint pt = new GeoPoint ((int)(mLat5*1E6),(int)(mLon5*1E6));         //创建布局参数         layoutParam  = new MapView.LayoutParams(               //控件宽,继承自ViewGroup.LayoutParams               MapView.LayoutParams.WRAP_CONTENT,                //控件高,继承自ViewGroup.LayoutParams               MapView.LayoutParams.WRAP_CONTENT,               //使控件固定在某个地理位置                pt,                0,                -32,               //控件对齐方式                 MapView.LayoutParams.BOTTOM_CENTER);         //添加View到MapView中         mMapView.addView(button,layoutParam);}else{   popupText.setText(getItem(index).getTitle());   Bitmap[] bitMaps={    BMapUtil.getBitmapFromView(popupLeft),     BMapUtil.getBitmapFromView(popupInfo),     BMapUtil.getBitmapFromView(popupRight)     };    pop.showPopup(bitMaps,item.getPoint(),32);}return true;}@Overridepublic boolean onTap(GeoPoint pt , MapView mMapView){if (pop != null){                pop.hidePop();                mMapView.removeView(button);}return false;}        }    }


activity_overlay.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    >    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="horizontal"    android:layout_width="fill_parent"    android:layout_height="wrap_content">             <Button        android:id="@+id/clear"        android:layout_height="fill_parent"        android:layout_width="fill_parent"        android:layout_weight="1"        android:layout_marginLeft="2dip"android:layout_marginRight="2dip"android:layout_marginTop="2dip"android:layout_marginBottom="2dip"        android:background="@drawable/button_style"        android:onClick="clearOverlay"        android:padding="10dip"        android:text="清除(clear)" />      <Button        android:id="@+id/resert"        android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:layout_weight="1"        android:layout_marginLeft="2dip"android:layout_marginRight="2dip"android:layout_marginTop="2dip"android:layout_marginBottom="2dip"        android:background="@drawable/button_style"        android:onClick="resetOverlay"        android:text="重置(reset)" />                  </LinearLayout>        <com.baidu.mapapi.map.MapView android:id="@+id/bmapView"    android:layout_width="fill_parent" android:layout_height="fill_parent"     android:clickable="true"     /></LinearLayout>

custom_text_view.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="horizontal"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    >        <TextView        android:id="@+id/popleft"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:background="@drawable/popup_side"         android:gravity="center"        android:textStyle="bold"         android:textColor="#3814ed"        android:text="更新位置"        android:textSize="12sp" />        <LinearLayout     android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:orientation="vertical"    android:id="@+id/popinfo"    >        <TextView        android:id="@+id/textcache"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:background="@drawable/popup_middle"        android:gravity="center"        android:textStyle="bold"        android:textColor="@android:color/black"        android:textSize="12sp" />         <TextView        android:id="@+id/popdown"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:background="@drawable/popup_down"        android:textColor="@android:color/black"        android:textSize="12sp" />            </LinearLayout>         <TextView        android:id="@+id/popright"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:background="@drawable/popup_side"        android:textColor="#3814ed"        android:gravity="center"        android:textStyle="bold"        android:text="更新marker"        android:textSize="12sp" /></LinearLayout>


原创粉丝点击