在OSMBonusPack

时间:2017-08-27 06:18:42

标签: android osmdroid

我在android中使用RadiusMarkerClusterer创建标记簇。我想显示制作特定标记簇的标记的位置。我没有得到如何在制作群集后检索标记信息。 有可能这样做吗?如果是,那么如何?

1 个答案:

答案 0 :(得分:0)

RadiusMarkerClusterer是MarkerClusterer(抽象父类)的非常简单的子类,它不向调用者提供有关聚簇标记的任何信息。但是在内部,类将此信息存储在StaticCluster

的实例中

您可以创建自己的实现。查看RadiusMarkerClusterer的源代码,并将其用作指南或示例。另一种解决方案可能是子类RadiusMarkerClusterer和覆盖方法buildClusterMarker。您可以通过setRelatedObjectMethod添加创建标记所需的信息,也可以使用所需的任何信息创建InfoWindow。

例如:

@Override public Marker buildClusterMarker(StaticCluster cluster, MapView mapView) {
    Marker m = new Marker(mapView);
    m.setPosition(cluster.getPosition());
    m.setInfoWindow(null);
    m.setAnchor(mAnchorU, mAnchorV);

    Bitmap finalIcon = Bitmap.createBitmap(mClusterIcon.getWidth(), mClusterIcon.getHeight(), mClusterIcon.getConfig());
    Canvas iconCanvas = new Canvas(finalIcon);
    iconCanvas.drawBitmap(mClusterIcon, 0, 0, null);
    String text = "" + cluster.getSize();
    int textHeight = (int) (mTextPaint.descent() + mTextPaint.ascent());
    iconCanvas.drawText(text,
            mTextAnchorU * finalIcon.getWidth(),
            mTextAnchorV * finalIcon.getHeight() - textHeight / 2,
            mTextPaint);
    m.setIcon(new BitmapDrawable(mapView.getContext().getResources(), finalIcon));
    //beggining of modification
    List<Marker> markersInCluster = new ArrayList<Marker>();
    for (int i = 0; i < cluster.getSize(); i++) {
        markersInCluster.add(cluster.getItem(i))
    }
    m.setRelatedObject(markersInCluster);
    //end of modification

    return m;

}