2

안드로이드에서 클러스터하고 싶은 약 800 개의 마커와 클러스터하고 싶지 않은 마커가있는 Google Maps를 사용하고 있습니다. 내가 클러스터하려는 마커를 들어 클러스터되지 않은 마커 용 ClusterManager onMarkerClickListener

, 나는 내가 클러스터하지 않을 마커를 들어

mClusterManager.addItem(annotation); 

사용하여 clusterManager에 추가, 나는 markerCollection

Marker marker = mClusterManager.getMarkerCollection().addMarker(annotation.getMarkerOptions()); 
에 직접 추가 여기

annoationClusterItem

을 구현하는 클래스 정의는 AirMapMarker 인스턴스를 지칭에는 사용자가 마커를 탭할 때 사용해야하는 식별 문자열과 같은 사용자 정의 정보가 들어 있습니다.

문제는 클러스터와 mapMarker 모두에 onClickListener를 등록 할 수 없다는 것입니다. 그렇게하면지도의 onMarkerClickListener 만 실행됩니다. 마커 클릭이 하나의 클러스터되지 않은 마커 일어난 경우

map.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { 
    public boolean onMarkerClick(Marker marker) { 
    // Handle marker click fires correctly. 
    } 
} 

mClusterManager.setOnClusterItemClickListener(new ClusterManager.OnClusterItemClickListener<AirMapMarker>(){ 
    public boolean onClusterItemClick(AirMapMarker marker) { 
    // Doesn't Fire 
    } 
} 

이제 문제는 onMarkerClick 내부에, 나는 경우, AirMapMarker의 일부입니다 식별에 액세스 할 필요가있다. MarkerAirMapMarkeronMarkerClick 안에 매핑하는 방법을 찾지 못했습니다.

또한 map.setOnMarkerClickListener을 완전히 제거하고 mClusterManager.setOnClusterItemClickListener에만 의존했습니다. 그러나 문제는 클러스터의 일부가 아닌 마커에서 마커 클릭이 발생하면 null으로 onClusterItemClick이 발생한다는 것입니다. 이는 마커를지도에 추가 할 때 clusterItem 객체가 아니라 markerOptions를 제공하기 때문입니다.

클러스터 관리자에는 클러스터링을 해제하는 옵션이 있지만 이것은 특정 마커가 아닌 전체적으로 발생합니다.

누구나 다음에 시도해야 할 사항에 대해 도움을 주시겠습니까?

답변

0

귀하의 질문을 이해했는지 알 수 없습니다. 그러나 여기에는 가능한 해결책이 있습니다.

클러스터하려는 마커를 ClusterManager에 추가 할 수 있습니다. clusterManager.addItem(yourItem);

클러스터하고 싶지 않은 항목은 Google지도 개체에 직접 추가 할 수 있습니다. 당신의 MarkerRenderer 내부 map.addMarker

당신은

protected void onClusterItemRendered(YourClusterItem clusterItem, Marker marker)

을 무시하고 필요한 경우 마커에 yourClusterItem를 매핑 할 수 있습니다. 또는 태그를 마커에 설정하여 해당 태그가 clusterItem임을 나타낼 수 있습니다.

public boolean onMarkerClick(Marker marker) 에서 태그 (또는지도)를 확인하면 각 마커 종류에 따라 다른 행동을 할 수 있습니다.