我一直在努力实现同样的目标,这正是我想要的: -
我已经使用叠加层实现了googleMapView,我有一个问题,我想在每个叠加层上点击时显示弹出窗口,当我点击另一个叠加层时,之前的popus应该消失,新的应该出现在点击的位置(即投影)点)。当我点击屏幕上的任何其他地方时弹出窗口不应该出现。我使用onTap事件记录onclick。 (map_overlay)是当有人点击地图上的投影点时我想要显示的布局。代码如下,map_overlay.xml可以是任何文件。
类:ItemizedOverlay
public boolean onTap(GeoPoint p, MapView mapView) {
LayoutInflater inflater = (LayoutInflater)cContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LayoutParams lp = new MapView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT, p, LayoutParams.WRAP_CONTENT);
LinearLayout view = (LinearLayout)inflater.inflate(R.layout.map_overlay, null);
mapView.removeView(view);
mapView.invalidate();
mapView.addView(view,lp);
mapView.invalidate();
return true;
}
下面是我正在显示投影点的主要类,它正常工作并且即时调用我已经在另一个类中实现了onTap事件,如上所示:
public **class MapView** extends MapActivity{
private ArrayList<MyClass> overlayItem ;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.large_mapview);
mapView = (MapView) findViewById(R.id.mapview);
// mapView.setBuiltInZoomControls(true);
List<Overlay> mapOverlays = mapView.getOverlays();
Drawable drawable = this.getResources().getDrawable(R.drawable.mappointer2);
ItemizedOverlay itemizedoverlay = new ItemizedOverlay(drawable,this);
OverlayItem overlayitem;
GeoPoint point;
double lat;
double lng;
for (int i = 0; i < overlayItem.size(); i++) {
lat = Double.parseDouble(overlayItem.get(i).getLatitude());
lng = Double.parseDouble(overlayItem.get(i).getLongitude());
point = new GeoPoint((int) (lat * 1E6),(int) (lng * 1E6));
overlayitem = new OverlayItem(point, i+"".toString(), overlayItem.get(i).getDetails().toString());
itemizedoverlay.addOverlay(overlayitem);
mapOverlays.add(itemizedoverlay);
}
mapView.invalidate();
}
}
答案 0 :(得分:12)
在github上查看Android-mapviewballoons。有一个可以扩展的ItemizedOverlay,可以做到这一点。我在几个应用程序中使用它。