一:增加覆盖物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很方便可以增加一个自定义的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);
}