2011-05-06 164 views
3

你將如何去創建和覆蓋整個地圖的ItemizedOverlay?Android覆蓋整個地圖

我在地圖上有多個標記是ItemizedOverlay類。

我想創建另一個覆蓋整個地圖的ItemizedOverlay來攔截不在我的標記上但是地圖本身上的觸摸事件。我已閱讀其他SO問題,如one,唯一的方法是通過ItemizedOverlay-> onTap。問題是我不知道如何創建覆蓋整個地圖的Drawable標記。

我已經使用LinearLayout drawables進行了實驗,但它似乎只能將可繪製圖像用作標記。

這裏是我的代碼

private class BackgroundOverlay<Item extends OverlayItem> extends ItemizedOverlay<OverlayItem>{ 

    private ArrayList<OverlayItem> overlays = new ArrayList<OverlayItem>(); 

    /** 
    * @param defaultMarker 
    */ 
    public BackgroundOverlay(Drawable defaultMarker,Context context) { 
     super(boundCenterBottom(defaultMarker)); 
    } 

    @Override 
    protected OverlayItem createItem(int i) { 
     return overlays.get(i); 
    } 

    @Override 
    public int size() { 
     return overlays.size(); 
    } 

    public void addOverlay(OverlayItem overlay) { 
     overlays.add(overlay); 
     populate(); 
    } 
    protected boolean onTap(int index){ 
     Toast.makeText(getApplicationContext(), "Touched background",Toast.LENGTH_SHORT).show();    
     return true;  
    } 

} 

,並建立覆蓋

 Drawable d=this.getResources().getDrawable(R.layout.full_screen); 
    BackgroundOverlay<OverlayItem> lay = new BackgroundOverlay<OverlayItem>(d,this); 
    overlayItem = new OverlayItem(this.mapView.getMapCenter(), "", ""); 
    lay.addOverlay(overlayItem); 
    mapOverlays.add(lay); 

和繪製XML

<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:background="@drawable/blue"> 
</LinearLayout> 

在此先感謝

+0

爲什麼要中斷對區域觸摸事件,而不需要標記? – Flo 2011-05-06 08:22:16

+0

我使用背景觸摸來關閉用戶點擊標記時顯示的彈出視圖。 – railwayparade 2011-05-06 12:01:08

回答

4

好了,所以我想它出。要覆蓋整個地圖,您需要添加一個簡單的Overlay子類,但不能繪製。並使用onTap事件。如此這般下方的其他覆蓋前

private class BackgroundOverlay extends Overlay{ 
    public boolean onTap (final GeoPoint p, final MapView mapView){ 
     Toast.makeText(getApplicationContext(), "Touched background",Toast.LENGTH_SHORT).show(); 
     hideOtherFires(mapView.getOverlays());   
     return true; 
    } 

和實例

//add a background overlay to intercept touches on background 
    BackgroundOverlay lay = new BackgroundOverlay(); 
    mapOverlays.add(lay); 
0

你可以只覆蓋現有ItemizedOverlays的一個疊加的中的onTap方法:

/* (non-Javadoc) 
* @see com.google.android.maps.Overlay#onTap(com.google.android.maps.GeoPoint, com.google.android.maps.MapView) 
*/ 
@Override 
public boolean onTap(GeoPoint p, MapView mapView) { 
    super.onTap(p, mapView); 
    OverlayItem item = getFocus(); 
    mapView.refreshDrawableState(); 
    return false; 
} 

確保你傳遞到超類,否則你的onTap(int index)將不會收到該事件。

換一種說法:

onTap(int index) - 檢測到OverlayItems水龍頭

onTap(GeoPoint p, MapView mapView) - 在地圖上的任何地方檢測水龍頭