android - 如何更改标记图标被点击的内容?

标签 android google-maps

在我们的项目中,我们使用 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/

相关文章:

android - 如何在android中播放flv视频?

iphone - 将 map 上具有多个屏幕的 iPhone UI 移植到 Android。使用多个 Activity ?

android - 如何在gridview中设置分隔符

javascript - 谷歌地图交通层具有特定的时间戳

javascript - Hook Google Map API 中的鼠标滚轮事件

javascript - 谷歌地图点击事件无法完全正确工作

android - 如何保持 DialogPreference 打开 onClick

java - 通过删除清除所有项目后列表返回一项

google-maps - GeoJson 特征坐标以米为单位,而不是 [lng, lat]。如何在谷歌地图中显示?

ios - 谷歌地图右键菜单滑动动画