我一直在努力实现同样的目标,这正是我想要的: –
我用叠加层实现了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(); } }
解决方法
在github上查看
Android-mapviewballoons.有一个可以扩展的ItemizedOverlay,可以做到这一点.我在几个应用程序中使用它.