2015-10-06 72 views
1

我有很多的多邊形繪製。其中一些重疊。我希望能夠檢測多邊形內的一個水龍頭,並顯示一個對話框,說明它在多邊形內被點擊(應該在水龍頭上檢測到該多邊形)。這種屬性可以通過ItemizedIconOverlay看到,我們可以在OverlayItem上點擊檢測所有的OverlayItem。如何在多邊形上實現這個?如何在osmdroid的多邊形中獲取onTap?

我繪製和添加多邊形的方式是:

MyPolygon myNewPolygon = new MyPolygon(this); 
myPolygon.setPoints(Polygon.pointsAsCircle(new GeoPoint(38.948714, -76.831918), 20000.0)); 
map.getOverlays().add(myPolygon); 
myNewPolygon.setPoints(Polygon.pointsAsCircle(new GeoPoint(38.851777, -77.037878), 20000.0)); 
map.getOverlays().add(myNewPolygon); 

回答

0

您是否嘗試過osmbonuspack了嗎?我知道肯定有一個onclick監聽器中的多邊形。

+0

我一直無法追查的onclick偵聽多邊形。我能做的最好的事情是擴展MapEventsOverlay,並在它的OnSingleTapUp上使用Polygon的contains(Event e)方法來傳遞Tap方法來檢測點擊多邊形。你能否引導我與多邊形的onclick監聽器。謝謝 –

+0

我正在使用osmbonuspack_v5.3 –

1

有各種答案,取決於你想要達到的目標。簡單的例子:如果你只是想打開一個氣泡,那麼就按照教程中的描述,將一個InfoWindow設置到你的多邊形。

如果您需要其他任何東西:對於Polygons,沒有Listener可用,因爲有標記和多義線(可能需要增強功能,可能?)。

所以你可以做的是子類Polygon - 就像你對MyPolygon做的那樣。然後重寫onTap方法 - 或者最有可能的onSingleTapConfirmed - 並實現你需要的行爲。

看着Polygon.onSingleTapConfirmed源可能有幫助(例如命中測試)。

+0

我是這麼做的,但是每一個Tap會發生什麼事情,每個多邊形的所有Polygon.onSingleTapConfirmed()方法都會被調用。例如,我有20個多邊形,即使點擊它們中的一個或只是簡單地在地圖上的任何地方,無論調用Polygon.onSingleTapConfirmed()方法20次。 –

+0

而且,由於重疊的多邊形,下面的多邊形,它的InfoWindow不會被點擊,這就是爲什麼我需要知道在該特定點擊位置上疊加了多少個多邊形 –

+0

答案1)是的。這就是爲什麼在onSingleTapConfirmed中必須使用Polygon.contains方法執行「命中測試」。如果水龍頭在多邊形上,那麼你應該返回true:這是「消耗事件」,並且該方法不會在「this this」下面的任何其他覆蓋層上調用。回答2)是的。疊加按降序排列。所以其他多邊形覆蓋的多邊形將不可點擊。很平常。你期望另一種行爲? – MKer

0

這是我如何使用它:

class CustomTapPolygon extends Polygon { 

    private CustomObject tag; 

    public CustomObject getTag() { 
     return tag; 
    } 

    public void setTag(CustomObject tag) { 
     this.tag = tag; 
    } 

    @Override 
    public boolean onSingleTapUp(MotionEvent e, MapView mapView) { 
     if (e.getAction() == MotionEvent.ACTION_UP && contains(e)) { 
      // YOUR CODE HERE 
      return true; 
     } 
     return super.onSingleTapUp(e, mapView); 
    } 
}