在我们的项目中,我们使用google maps v2,我需要找到一种方法来在敲击引脚后更改引脚图标。此外,当需要点击另一个引脚时,我需要返回此引脚的初始图标。 所以现在我们有这样的事情:
public ClusterManager.OnClusterItemClickListener<OurClusterItem> mClusterItemClickListener = new ClusterManager.OnClusterItemClickListener<OurClusterItem>() {
@Override
public boolean onClusterItemClick(OurClusterItem item) {
// Some actions here
return true;
}
};
然后我们将此侦听器设置为map:
ClusterManager mClusterManager = new ClusterManager<OurClusterItem>(getActivity(), getMap());
mClusterManager.setOnClusterItemClickListener(mClusterItemClickListener);
googleMap.setOnMarkerClickListener(mClusterManager);
那么,有人可以为此提供解决方案吗? 谢谢!
答案 0 :(得分:13)
所以,我找到了解决方案 - 也许这对某人也有帮助。
因此,首先,我们需要使用自定义渲染器(继承自DefaultClusterRenderer
)。 DefaultClusterRenderer
拥有自己的缓存,其中包含ClusterItem
对和Marker
对:
public MarkerCache<T> mMarkerCache = new MarkerCache<T>();
所以我在CustomClusterRenderer
public Marker getMarker(OurClusterItem clusterItem) {
return mMarkerCache.get(clusterItem);
}
之后,我已经添加了我们的片段2变量:
private Marker mCurrentSelectedMarker;
private ClusterStore mCurrentSelectedClusterItem;
并更改ClusterItemClickListener
的实施:
public ClusterManager.OnClusterItemClickListener<OurClusterItem> mClusterItemClickListener = new ClusterManager.OnClusterItemClickListener<OurClusterItem>() {
@Override
public boolean onClusterItemClick(ClusterStore item) {
// return to previous marker non-selected icon
if (mCurrentSelectedMarker != null) {
mCurrentSelectedMarker.setIcon(BitmapDescriptorFactory.fromResource(mCurrentSelectedClusterItem.getIconResourceId()));
}
Marker marker = mCustomRenderer.getMarker(item);
if (marker != null) {
mCurrentSelectedMarker = marker;
mCurrentSelectedClusterItem = item;
marker.setIcon(BitmapDescriptorFactory.fromResource(item.getIconSelResourceId()));
}
// some other code
return true;
}
};
这就是全部,它就像一个魅力。