ClusterManager重绘的谷歌地图V2 utils的标志 [英] ClusterManager repaint markers of Google maps v2 utils

查看:591
本文介绍了ClusterManager重绘的谷歌地图V2 utils的标志的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

林喜使得服务器请求,当我收到来自服务器的请求,我执行的UI线程一个ClusterManager.addItem(),但这个项目不画在地图上,只有当我做一个变焦更新(+ , - )都出现了。此外,我试着调试渲染,但onBeforeClusterRendered / onBeforeClusterItemRendered不叫,直到我更新的放大图。 任何想法如何刷新地图/ clusterManager /标记?

  MarkerManager markerManager =新MarkerManager(图)
        clusterManager =新ClusterManager< TweetClusterItem>(getActivity(),地图,markerManager);
        clusterManager.setRenderer(新TweetClusterRenderer(getActivity(),地图,clusterManager,defaultMarker));
        clusterManager.setOnClusterClickListener(本);
        clusterManager.setOnClusterInfoWindowClickListener(本);
        clusterManager.setOnClusterItemClickListener(本);
        clusterManager.setOnClusterItemInfoWindowClickListener(本);

        UiSettings uiSettings = map.getUiSettings();
        uiSettings.setZoomControlsEnabled(真正的);
        uiSettings.setMyLocationButtonEnabled(假);

        map.setOnCameraChangeListener(clusterManager);
        map.setOnMarkerClickListener(clusterManager);
        map.setOnInfoWindowClickListener(clusterManager);
        map.setOnMapClickListener(本);
 

解决方案

看来我找到了一个解决办法。

ClusterManager使用的渲染器,在这种情况下,从DefaultClusterRenderer继承它使用一个内部高速缓存,被添加到标记映射的高速缓存。您可以直接访问到所添加的标记在地图上,我不使用信息窗口,所以我添加标记options.title()一个ID为后来发现这个标记,因此:

  @覆盖
保护无效onBeforeClusterItemRendered(TweetClusterItem项目,MarkerOptions markerOptions){

     .... BLABLA code ....
            markerOptions.title(Long.toString(tweet.getId()));
     .... BLABLA code ....


}
 

而当我想重装clusterItem我调用这个方法:

  / **
  * Workarround重绘标志
  * @参数逐项重绘
 * /
  公共无效reloadMarker(TweetClusterItem项目){

        MarkerManager.Collection markerCollection = clusterManager.getMarkerCollection();
        收藏<标记>标记= markerCollection.getMarkers();
        串strId = Long.toString(item.getTweet()的getId());
        对于(M标记:标记){
            如果(strId.equals(m.getTitle())){
                m.setIcon(图标设置);
                打破;
            }
        }

    }
 

也许是有点哈克,但它的工作原理,我din't发现任何其他方式来做到这一点。如果你发现了另一个更好的办法,请分享一下:)

Hi Im making a server request and when I received the request from server, I'm executing on Ui Thread a ClusterManager.addItem() but this items are not painting in the map, only when I make a zoom update (+,-) are showing. Also, I tried to debug the renderer, but onBeforeClusterRendered / onBeforeClusterItemRendered are not called until I update the zoom in map. Any ideas how to refresh map/clusterManager/markers?

        MarkerManager markerManager = new MarkerManager(map);
        clusterManager = new ClusterManager<TweetClusterItem>(getActivity(), map, markerManager);
        clusterManager.setRenderer(new TweetClusterRenderer(getActivity(), map, clusterManager, defaultMarker));
        clusterManager.setOnClusterClickListener(this);
        clusterManager.setOnClusterInfoWindowClickListener(this);
        clusterManager.setOnClusterItemClickListener(this);
        clusterManager.setOnClusterItemInfoWindowClickListener(this);

        UiSettings uiSettings = map.getUiSettings();
        uiSettings.setZoomControlsEnabled(true);
        uiSettings.setMyLocationButtonEnabled(false);

        map.setOnCameraChangeListener(clusterManager);
        map.setOnMarkerClickListener(clusterManager);
        map.setOnInfoWindowClickListener(clusterManager);
        map.setOnMapClickListener(this);

解决方案

Seems that I found a workaround.

ClusterManager uses a renderer, in this case it inherits from DefaultClusterRenderer which uses a internal cache, a cache of markers that are added to map. You can access directly to the added markers on the map, I don't use the info window, so i add marker options.title() an ID for later find this marker, so:

@Override
protected void onBeforeClusterItemRendered(TweetClusterItem item, MarkerOptions markerOptions) {

     .... Blabla code....          
            markerOptions.title(Long.toString(tweet.getId()));
     .... Blabla code....


}

and when I want to reload the clusterItem I call this method:

/**
  * Workarround to repaint markers
  * @param item item to repaint
 */
  public void reloadMarker(TweetClusterItem item) {

        MarkerManager.Collection markerCollection = clusterManager.getMarkerCollection();
        Collection<Marker> markers = markerCollection.getMarkers();
        String strId = Long.toString(item.getTweet().getId());
        for (Marker m : markers) {
            if (strId.equals(m.getTitle())) {
                m.setIcon( ICON TO SET);
                break;
            }
        }

    }

Maybe is a little hacky but it works and I din't found any other way to do this. If you found another better way, please share :)

这篇关于ClusterManager重绘的谷歌地图V2 utils的标志的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆