2012-10-07 1 views
2

가능한 중복 : 안드로이드 오버레이 ONTAP() - 그것은 특별히 그 도청 된이 오버레이 여부를 결정


Android - Map overlay onTouchEvent/onTap howto?

은 내가 가진 MapView을 사용합니다 안드로이드 응용 프로그램이 Overlay (파란색 핀) 건물 목록에서 선택한 건물의 위치를 ​​보여줍니다. 사용자가 오버레이를 탭하면 건물의 이름과 번호를 나타내는 토스트 메시지를 표시하려고합니다. 내가 겪고있는 문제는 오버레이에서 onTap()을 다룬 나의 처리가 모든 탭 이벤트를 청취한다는 것입니다. 파란색 핀을 누르거나 완전히 다른 곳을 탭하는지에 관계없이 탭 이벤트가 발생합니다. 그냥 문제를 일으키는 것을 호출되는 onTap()의 비 차별적 본성,

searchedPlaceOverlay = new SearchedPlaceOverlay(SearchPlaces.chosenPlace.getLocation(), this) { 
    public boolean onTap(GeoPoint p, MapView mapView) { 
     Toast toast = Toast.makeText(getApplicationContext(), "<building name and #>", Toast.LENGTH_LONG); 
     toast.show(); 
     return true; 
    } 
}; 
mv.getOverlays().add(searchedPlaceOverlay); 

SearchedPlaceOverlaycom.google.android.maps.Overlay 확장하고 파란색 핀이지도에 잘 표시

내 코드는 다음과 같습니다. 이 오버레이가 도청되었는지 구체적으로 판단 할 수있는 간단한 방법이 있습니까?

답변

2

는 @tabbykitten는 ItemizedOverlay이 간단 할 것입니다,하지만 당신은 그것을 사용하지해야하는 경우, 당신은 다음과 같은 방법 사용할 수 있습니다 말했듯이 :

  1. 가져 오기는 X가 Y 당신의 마커에서
  2. 이 경계에서 얻을 좌표를 당신의 markwe drawable. 마커 유형에 종속적 인 경우 지오 포인트의 중심에 있지 않을 수 있습니다.
  3. 지오 포인트에서 위치의 경계를 조정합니다.
  4. x, y 좌표를 탭하여 탭합니다.
  5. 조정 된 마커 경계 안에 있는지 확인하십시오. 아래

예제 코드 : 할 필요가있는 경우

public boolean onTap(GeoPoint p, MapView mapView) { 
    Projection projection = mapView.getProjection(); 
    projection.toPixels(yourMarkerGeopoint, pointTap); 
    yourMarker.copyBounds(boundsTap); 
    boundsTap.offset(pointTap.x, pointTap.y); 
    projection.toPixels(geoPoint, pointTap); 
    if(boundsTap.contains(pointTap.x, pointTap.y)){ 
    //you tap on the marker 
    return true; 
    } 
    return false; 
} 
1

onTap (int index)과 함께 ItemizedOverlay가 있습니다. 그 안에 오버레이를 넣으십시오. 그러면 도청 된 색인을 알 수 있습니다.

+0

나는이에 의지 할 수 있지만 이상적으로 나는 ItemizedOverlay 그것으로 가져 오는 추가 코드를 방지하고 싶습니다. –

+0

죄송하지만 ItemizedOverlay가 필요합니다. https://developers.google.com/maps/documentation/android/reference/com/google/android/maps/ItemizedOverlay를 읽으세요. – logcat