【问题标题】:osmdroid marker info window dont show after clustering markersosmdroid 标记信息窗口在聚类标记后不显示
【发布时间】:2018-10-23 07:55:48
【问题描述】:

我正在使用 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);
    }

【问题讨论】:

    标签: android dictionary openstreetmap osmdroid


    【解决方案1】:

    ReadiusMarkerClusterer 不应该显示集群的信息窗口。一个簇代表一组单独的标记,因此无法决定应该显示哪个信息窗口。

    你可以查看source code of the 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;
    }
    

    如果您想为您的集群创建信息窗口,您可以通过继承 RadiusMarkerClusterer 并覆盖此方法来创建自定义 MarkerClusterer 类。只需调用父版本并将所需的信息窗口注入Marker 实例即可。

    【讨论】:

    • 我不想显示集群的信息窗口,我已经为集群内的每个标记设置了信息窗口,问题是当我点击不显示的标记信息窗口时
    • @edalat-feizi 我明白了,我误解了你的问题。
    • @EdalatFeizi 好吧,在这种情况下,我恐怕无法发现问题。我检查了库的来源,它似乎应该可以工作并且您的代码是正确的。您可以尝试将 OnMarkerClickListener 添加到所有标记并从中调用 marker.showInfoWindow() ,但这正是 Marker 中的默认实现所做的。
    • 感谢您的回复,我还在添加到集群之前为每个标记添加了一个点击侦听器,但点击从未调用过的标记。
    • @EdalatFeizi 是的,这就是我的预期。问题是,您在问题中包含的代码部分是正确的。我仔细检查了库中的示例 (github.com/MKergall/osmbonuspack/blob/master/OSMBonusPackTuto/…),将您的代码复制到示例中,并进行了必要的修改以使其运行并正常工作。
    猜你喜欢
    • 2016-07-27
    • 2013-09-02
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    • 1970-01-01
    • 2013-11-26
    相关资源
    最近更新 更多