2012-07-09 56 views
0

我在我的應用程序中實施了Google地圖。我寫了自己的覆蓋類,擴展了ItemizedOverlay以添加覆蓋。使用相同的疊加層類別,我還添加了疊加層以在地圖上顯示我的當前位置。找到我的地圖上的哪個疊加層已被點擊

此覆蓋類的onTouchEvent用於確定觸摸的位置,並可將覆蓋對象移動到地圖上的任何位置。但是,這造成了一些問題。指向我當前位置的指針也變爲可移動的。我想修復這個當前位置指針。

爲此,我創建了一個新類MyNewLocationOverLay,它擴展了我以前創建的自定義疊加層。我的計劃是重寫onTouchEvent方法,並在返回super.onTouchEvent時觸及其他覆蓋層,並在觸摸mylocation覆蓋層時返回true。我如何找出被點擊的疊加層。我想:

public class myOverlayclass extends OverLayClass { 

    public myOverlayclass(Drawable marker) { 
     super(marker); 

     // TODO Auto-generated constructor stub 
    } 

    public boolean onTouchEvent(MotionEvent motionEvent, MapView mapView) { 
     System.out.println("The overlays are*************"+mapView.getOverlays()); //this lists the overlays 
     return super.onTouchEvent(motionEvent, mapView); 
    } 
} 

我需要比較這對發現其覆蓋被感動了。我如何比較疊加。

if (mapView.getOverlays().contains(mYLocationOverLay)) 

似乎不起作用。

回答

0

在onTouchEvent方法中,我執行了一個命中測試以找出哪個覆蓋被觸摸。並將其與myLocationGeoPoint進行比較。

for(OverlayItem item : overlayItems) 
        { 
         Point p = new Point(); 

         mapView.getProjection().toPixels(item.getPoint(), p); 
         item.setMarker(marker); 
         boolean isHit = hitTest(item, marker, x - p.x, y - p.y); 

         if(isHit && !(item.getPoint().equals(mylocationgeoPoint))) //this is where I'm checking if I hit my current locating geopoint 
         { 
          //NOW THE OVERLAYS ARE MOVABLE 
          System.out.println("-------------------------inside isHit -----------------------"+item.getPoint() +"my locating geo point is" +mylocationgeoPoint); 
. 
. 
. } 
} 

希望它可以幫助別人!

0

大部分觸摸位置不會是覆蓋位置的精確副本,因此您不能使用.quals或==。添加+ -X到你的計算工作,例如:

for(Overlay item : mapView.getOverlays()) 
    { 

      MarkerOverlay ov = (MarkerOverlay) item; 



      if (Math.abs(ov.getGlobalGeoPoint().getLongitudeE6() - geoPoint.getLongitudeE6()) <50 && 
        Math.abs(ov.getGlobalGeoPoint().getLatitudeE6()-geoPoint.getLatitudeE6())<50) { 
       //do ur work here 


       return true; 
      } 
      else{ 


      } 


    } 
相關問題