在我们的项目中,我们使用 google maps v2,我需要找到一种方法来在点按图钉后更改图钉图标。此外,当另一个 pin 被点击时,我需要返回该 pin 的初始图标。 所以现在我们有这样的东西:
public ClusterManager.OnClusterItemClickListener<OurClusterItem> mClusterItemClickListener = new ClusterManager.OnClusterItemClickListener<OurClusterItem>() {
@Override
public boolean onClusterItemClick(OurClusterItem item) {
// Some actions here
return true;
}
};
然后我们将此监听器设置为映射:
ClusterManager mClusterManager = new ClusterManager<OurClusterItem>(getActivity(), getMap());
mClusterManager.setOnClusterItemClickListener(mClusterItemClickListener);
googleMap.setOnMarkerClickListener(mClusterManager);
那么,有人可以为此提供解决方案吗? 谢谢!
最佳答案
所以,我找到了解决方案 - 也许这也会对某人有所帮助。
因此,首先,我们需要使用自定义渲染器(继承自 DefaultClusterRenderer
)。 DefaultClusterRenderer
有自己的缓存,其中包含成对的 ClusterItem
和相应的 Marker
:
public MarkerCache<T> mMarkerCache = new MarkerCache<T>();
所以我在 CustomClusterRenderer
中编写了下一个方法
public Marker getMarker(OurClusterItem clusterItem) {
return mMarkerCache.get(clusterItem);
}
之后,我向我们的 fragment 添加了 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;
}
};
仅此而已,它就像一个魅力。
关于android - 如何更改标记图标被点击的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25684219/