android mapview overlay popup hide

时间:2011-01-17 23:00:13

标签: android popup overlay hide android-mapview

我有一个mapview和覆盖项目,当点击时显示popo与文本。我想要的是当用户在这些叠加项目之外的地图上点击时,弹出窗口会隐藏弹出窗口,如果它当前可见。

2 个答案:

答案 0 :(得分:0)

这样做的唯一方法(据我所知),是为地图添加新的叠加层,巫婆充当弹出窗口。当您点击叠加层外部时,只需将其从叠加列表中删除即可。

这意味着您必须自己为弹出窗口绘制和处理事件。

答案 1 :(得分:0)

我一直在努力实现同样的目标,这正是我想要的: - 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,我有一个问题,我想在每个叠加层上点击时显示弹出窗口,当我点击另一个叠加层时,之前的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 类MapView 扩展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();
}

}