一:增加覆盖物MyLocationOverlay
MyLocationOverlay在普通的Overlay基础上进行了封装,可以更好的进行一个定位处理,例如方向。
要想点击MyLocationOverlay触发一个事件,就需要继承MyLocationOverlay重写dispatchTap方法
public class LocationOverlay extends MyLocationOverlay{ private ShipActivity sa; public LocationOverlay(MapView arg0,ShipActivity _s) { super(arg0); this.sa = _s; } @Override protected boolean dispatchTap() { //处理点击事件 sa.openPopupOverlay(this); return super.dispatchTap(); } }这里在构造函数传了地图所在类的对象过来,以便调用地图类的相应方法,显示出来详细信息框PopupOverlay
把扩展的MyLocationOverlay增加到地图主类
private void addMyLocationOverlay() { myLocationOverlay = new LocationOverlay(mMapView,this); new Message().showToast("come baby!", ShipActivity.this); LocationData locData = new LocationData(); //手动将位置源置为天安门 locData.latitude =39.9022; //百度纬度坐标 locData.longitude = 116.404; //百度经度坐标 locData.direction = 50.0f; // GPS定位时方向角度 round:0-360 myLocationOverlay.enableCompass();//打开指南针 myLocationOverlay.setData(locData); mMapView.getOverlays().add(myLocationOverlay); mMapView.refresh(); }
二:显示出详细信息框PopupOverlay
PopupOverlay很方便可以增加一个自定义的view到对话框中,
当然也是可以进行view中按钮的事件处理,只需要先得到view在得到view中的按钮在绑定事件就可以了
public void openPopupOverlay(LocationOverlay _lo) { LocationData locData = _lo.getMyLocation(); PopupOverlay pop = new PopupOverlay(mMapView,new PopupClickListener() { @Override public void onClickedPopup(int index) { new Message().showToast("茂茂",ShipActivity.this); } }); GeoPoint p2 = new GeoPoint((int) ( locData.latitude * 1E6), (int) (locData.longitude * 1E6)); //得到自定义view View popview = LayoutInflater.from(this).inflate( R.layout.popupoverlay, null); //通过自定义view得到按钮并绑定事件 Button lookbut = (Button)popview.findViewById(R.id.lookbut); lookbut.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { new Message().showToast("点击查看", ShipActivity.this); }}); Button surebut = (Button)popview.findViewById(R.id.surebut); surebut.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { new Message().showToast("点击确定", ShipActivity.this); }}); pop.showPopup(popview, p2, 33); }