всплывающее окно - PullRequest
       23

всплывающее окно

2 голосов
/ 18 января 2011

У меня есть вид карты и элементы наложения, которые при нажатии показывают всплывающее окно с текстом. я хочу, чтобы пользователь нажимал на карту за пределами этих элементов наложения или всплывающее окно скрывало всплывающее окно, если оно отображается в данный момент.

Ответы [ 2 ]

0 голосов
/ 07 февраля 2011

Я пытался добиться того же, это именно то, что я хочу: - 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();
}

}

0 голосов
/ 18 января 2011

Единственный способ сделать это (насколько я знаю), это добавить новый оверлей на вашу карту, ведь ведь он служит всплывающим окном. При нажатии за пределами наложения просто удалите его из списка наложений.

Это означает, что вы должны сами рисовать и обрабатывать события для своего всплывающего окна.

...