ClusterManager重绘的谷歌地图V2 utils的标志 [英] ClusterManager repaint markers of Google maps 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屋!