2

私はクラスタ化したい約800個のマーカーとクラスター化したくないマーカー80個を使ってAndroidでGoogleマップを使用しています。私はクラスタ化するマーカーのクラスタ化されていないマーカーのClusterManager onMarkerClickListener

、私はクラスタ化したくないマーカーについて

mClusterManager.addItem(annotation); 

を使用してClusterManagerのに追加、私はmarkerCollection

Marker marker = mClusterManager.getMarkerCollection().addMarker(annotation.getMarkerOptions()); 
に直接追加します

ここでannoationは、カスタムクラスであるAirMapMarkerのインスタンスを指します。ClusterItem

annotationは、そのような私は、ユーザーがマーカーをタップしたときに使用する必要があります識別文字列などのカスタム情報が含まれています。

問題は、私は、クラスタと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の一部であり、識別にアクセスする必要があります。私はonMarkerClickAirMapMarkerMarkerをマッピングする方法を見つけ出すことができませんでした。

また、私は完全にmap.setOnMarkerClickListenerを除去してmClusterManager.setOnClusterItemClickListenerにのみ依存してみました。しかし、今の問題は、マーカーのクリックがクラスタの一部ではないマーカー、パラメータnullonClusterItemClick火災で発生したときということです。これは、マーカーをマップに追加するときに、clusterOptionsオブジェクトではなくmarkerOptionsを提供するためです。

ClusterManager内にはクラスタリングを無効にするオプションがありますが、これは特定のマーカーではなくグローバルに発生します。

誰でも私が次に試してみたいことを教えてください。私は右のあなたの質問を理解している場合、私は知らない

答えて

0

。しかし、ここに可能な解決策があります。

クラスタ化するマーカーをClusterManagerに追加できます。 clusterManager.addItem(yourItem);

クラスタ化したくないものは、GoogleMapオブジェクトに直接追加できます。あなたのMarkerRendererインサイド map.addMarker

あなたは

protected void onClusterItemRendered(YourClusterItem clusterItem, Marker marker)

をオーバーライドして、必要に応じて自分のマーカーにyourClusterItemをマッピングすることができます。または、タグをマーカーに設定して、それがclusterItemであることを示すこともできます。

public boolean onMarkerClick(Marker marker) では、マーカーの種類ごとに異なる動作をするようにタグ(またはマップ)を確認できます。

関連する問題