web-dev-qa-db-ja.com

Googleマップのclustererでマーカーに独自のアイコンを設定する方法

GoogleMapsクラスタリングを使用しています。私には4つの異なるタイプのマーカーがあり、それぞれが1つの抽象クラスから拡張され、それぞれにowmアイコンがあり、MarkerOptionsフィールドで定義されています。この抽象クラスにはClusterManagerを使用しています。使うだけで

//marker is instance of one of extended classes and has abstract class type
clusterManager.addItem(marker);

クラスタリング後、アイコンをデフォルトに設定します。どうすればこれを修正できますか?私はこのようなものを使おうとしていました:

//marker is abstract marker, getMarker returns the MarkerOptions of this marker
clusterManager.getMarkerCollection().addMarker(marker.getMarker());

しかし、それも機能しません。マーカーはマップ上に必要なアイコンとともに印刷されますが、クラスタリングは行われません。

抽象クラスにメソッドを作成する必要がありますか、それともDefaultClusterRendererから拡張してこれを行う方法がありますか?グーグルを使ったり、グーグルマップライブラリを学んだりして、それに関する情報を見つけられませんでした。

助けてくれてありがとう!

15
Vasilov Artur

だから、それは私の愚かでした。繰り返しになりますが、図書館を勉強して、もっと注意を払う必要があることを示しています。誰かが答えに興味を持っているなら、ここにあります:私は、DefaultClusterRendererのいくつかのメソッドをオーバーライドする必要があると正しく思っていました。したがって、完全な方法:独自のクラスを作成し、DefaultClusterRendererから拡張します。

public class OwnIconRendered extends DefaultClusterRenderer<AbstractMarker>

次に、メソッドをオーバーライドしますonBeforeClusterItemRendered

@Override
protected void onBeforeClusterItemRendered(AbstractMarker item,
        MarkerOptions markerOptions) {
    markerOptions.icon(item.getMarker().getIcon());
}

方法はかなり単純ですが、クラスタリングの動作が遅くなり始めたように私には思えます。だから、それで十分です。

25
Vasilov Artur