2015-10-01 5 views
8

マップ上でアンドロイドクラスタリングユーティリティを使用していて、クラスタリングライブラリによって処理されるすべてのマーカーに対して、mClusterManager.setOnClusterItemClickListener()を使用してonclickリスナーをsuccesffuly実装しました。Androidクラスタとマーカークリック

mClusterManagerを使用せずにマップのmMap.addMarker()を直接使用していくつかのマーカーを追加することもできますので、地図上にクラスタ化されていないと確信しています。

問題は、クリックしたクラスタのマーカーを処理するのにmMap.setOnMarkerClickListener(mClusterManager)を既に使用しているため、これらのマーカー(常に非クラスタ化されたもの)のクリックを傍受できないということです。

クリックされたクラスタ化されたマーカーとクリックされたマーカーをクラスタリングライブラリで処理しないで聞く方法はありますか?

また、クラスタマネージャで特定のマーカーをクラスタリングしないように指定する方法はありますか?この場合、クラスタリングユーティリティを使用してすべてのマーカーが表示されるので、これらの異なるクリックリスナーを処理する必要はありません。

あなたは

答えて

14

あなたはClusterManagerコンストラクタに渡す新しいMarkerManagerを作成することができますありがとうございました。その後、MarkerManager#newCollectionを使用して新しいマーカーコレクションを作成し、MarkerManager.Collection#addMarkerメソッドを使用して通常のマーカーをマップに追加します。

mMap.setOnMarkerClickListener(mClusterManager)を呼び出す代わりに、mMap.setOnMarkerClickListener(mMarkerManager)を呼び出して、Markerクリックイベントを適切なリスナーに転送します。また、MarkerManager.Collection#setOnMarkerClickListener(GoogleMap.OnMarkerClickListener markerClickListener)機能を使用して、通常のマーカーに対してonMarkerClickリスナーを設定する必要があります。

クラスがどのように相互作用するかを知るために、MarkerManagerおよびClusterManagerクラスのソースを調べることをおすすめします。

+3

パーフェクトを取得します。あなたが与えたMarkerManagerリンクを読むことは本当に助けになりました。良い提案です。 –

5

Markerのクリックイベントを受け取るもう1つの方法は、OnClusterItemClickListenerインターフェイスを使用しています。

コールmClusterManager.setOnClusterItemClickListener(this);とあなたのクラスがOnClusterItemClickListener

を実装作る次にonClusterItemClickメソッドの内部で、あなたはそれが、THXを働いてクリックされたマーカーであるClusterItem、

@Override 
public boolean onClusterItemClick(ClusterItem clusterItem) { 

    Toast.makeText(getActivity(), "Latitude " + clusterItem.getPosition().latitude, Toast.LENGTH_LONG).show(); 

    return true; 
} 
+1

これは簡単です。 – dan

+1

しかし、 'ClusterItem'から拡張されたクラスがあれば、それ以上の属性はありません。たとえば、 'Icon'、' Id'、...などです。 –

+0

@ Mr.Hydeおそらくあなたはシステムを騙すことができます。もしあなたがデータベースを持っていれば、緯度と経度は変わらず、データを元に戻すことができます。私は私のプロジェクトでそれを実装したいと思います。ありがとう@Atul! –