Я пытался добиться того же, это именно то, что я хочу: - http://proxy.latest.xuemath.appspot.com/img?s=aR.1f.1be6ifej.2ec/_Fbk8IlxNQXM/S-ruq97dRWI/AAAAAAAAELY/s-o3onSReiU/s400/kml_google_maps_v3.bmp
Я реализовал googleMapView с оверлеями, у меня есть одна проблема, я хочу показать всплывающее окно при нажатии на каждый оверлейи когда я нажимаю на другой оверлей, предыдущее попус должно исчезнуть, а новое должно появиться в выбранном месте (т. е. точки проекции).И всплывающее окно не должно появляться, когда я щелкаю где-либо еще на экране. Я использую событие 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;
}
Ниже приведен класс Main, в котором я отображаю точки проекции, которая работает нормально, и я звоню. Я реализовал событие onTap.в другом классе, как показано выше:
public class MapView extends MapActivity {private ArrayList 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();
}
}