Информационное окно маркера osmdroid не отображается после кластеризации маркеров - PullRequest
0 голосов
/ 13 мая 2018

Я использую osmdroid для отображения открытой карты улиц в приложении для Android проблема при кластеризации маркеров при нажатии на маркер, информационное окно маркеров не отображается. вот как я добавляю маркеры для кластеризации:

    RadiusMarkerClusterer poiMarkers = new RadiusMarkerClusterer(this);
    Drawable clusterIconD = getResources().getDrawable(R.drawable.marker_cluster);
    Bitmap clusterIcon = ((BitmapDrawable) clusterIconD).getBitmap();
    poiMarkers.setIcon(clusterIcon);
    poiMarkers.getTextPaint().setColor(Color.WHITE);
    poiMarkers.getTextPaint().setTextSize(12 * getResources().getDisplayMetrics().density); //taking into account the screen density
    poiMarkers.mAnchorU = Marker.ANCHOR_CENTER;
    poiMarkers.mAnchorV = Marker.ANCHOR_CENTER;
    poiMarkers.mTextAnchorV = 0.40f;
    map.getOverlays().add(poiMarkers);

    for (int i = 0; i < places.size(); i++) {
        final Marker startMarker = new Marker(map);
        startMarker.setPosition(new GeoPoint(places.get(i).getLat(), places.get(i).getLng()));

        startMarker.setIcon(getResources().getDrawable(R.drawable.ic_new_loc));

        startMarker.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_CENTER);
        MyInfoWindow infoWindow = new MyInfoWindow(R.layout.map_marker_info_window, map);
        infoWindow.setPlace(places.get(i));
        startMarker.setInfoWindow(infoWindow);
        poiMarkers.add(startMarker);
    }

1 Ответ

0 голосов
/ 13 мая 2018

ReadiusMarkerClusterer не должен отображать информационные окна для кластеров.Кластер представляет собой группу отдельных маркеров, поэтому невозможно решить, какое информационное окно должно отображаться.

Вы можете проверить исходный код класса RadiusMarkerClusterer .

Маркеры (которые представляют кластеры) создаются в методе buildClusterMarker:

@Override public Marker buildClusterMarker(StaticCluster cluster, MapView mapView) {
    Marker m = new Marker(mapView);
    m.setPosition(cluster.getPosition());
    m.setInfoWindow(null); //<===== there you can see, no info window
    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));

    return m;
}

Если вы хотите иметь информационные окна для ваших кластеров, вы можете создать собственный класс MarkerClusterer, наследуя от RadiusMarkerClustererи переопределив этот метод.Просто вызовите родительскую версию и введите нужное информационное окно в экземпляр Marker.

...