如何更改标记图标它被点击了什么? [英] How to change marker icon what it was tapped?

查看:98
本文介绍了如何更改标记图标它被点击了什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我们的项目中,我们使用谷歌地图V2,我需要找到一种方法来改变引脚图标后点击。此外,我需要返回该引脚的初始图标,当另一个引脚将被点击。
因此,现在我们有了这样的东西:

  public ClusterManager.OnClusterItemClickListener< OurClusterItem> mClusterItemClickListener = new ClusterManager.OnClusterItemClickListener< OurClusterItem>(){

@Override
public boolean onClusterItemClick(OurClusterItem item){
//这里的一些操作
return true;
}
};

然后我们设置这个监听器来映射:

  ClusterManager mClusterManager = new ClusterManager< OurClusterItem>(getActivity(),getMap()); 
mClusterManager.setOnClusterItemClickListener(mClusterItemClickListener);
googleMap.setOnMarkerClickListener(mClusterManager);

那么,有人可以为此提供解决方案吗?
Thanks!

解决方案

所以,我找到了解决方案 - 也许这对别人也有帮助。 >

所以,首先,我们需要使用我们的自定义渲染器(从 DefaultClusterRenderer 继承)。 DefaultClusterRenderer 拥有自己的缓存,其中包含 ClusterItem 和相应的 Marker

  public MarkerCache< T> mMarkerCache = new MarkerCache< T>(); 

所以我在 CustomClusterRenderer

  public Marker getMarker(OurClusterItem clusterItem){
return mMarkerCache.get(clusterItem);
}

之后,我添加了片段2变量:

 私人标记mCurrentSelectedMarker; 
private ClusterStore mCurrentSelectedClusterItem;

并更改 ClusterItemClickListener 的实现:

  public ClusterManager.OnClusterItemClickListener< OurClusterItem> mClusterItemClickListener = new ClusterManager.OnClusterItemClickListener< OurClusterItem>(){

@Override
public boolean onClusterItemClick(ClusterStore item){
//返回上一个标记非选定图标
if(mCurrentSelectedMarker!= null){
mCurrentSelectedMarker.setIcon(BitmapDescriptorFactory.fromResource(mCurrentSelectedClusterItem.getIconResourceId()));
}
标记标记= mCustomRenderer.getMarker(item);
if(marker!= null){
mCurrentSelectedMarker = marker;
mCurrentSelectedClusterItem = item;
marker.setIcon(BitmapDescriptorFactory.fromResource(item.getIconSelResourceId()));
}
//一些其他代码
返回true;
}
};

就这样,它就像一个魅力一样。


In our project we use google maps v2, and I need to find a way to change pin icon after the pin was tapped. Also I need to return initial icon for this pin when another pin will be tapped. So now we have something like this:

public ClusterManager.OnClusterItemClickListener<OurClusterItem> mClusterItemClickListener = new ClusterManager.OnClusterItemClickListener<OurClusterItem>() {

    @Override
    public boolean onClusterItemClick(OurClusterItem item) {
        // Some actions here
        return true;
    }
};

and then we set this listener to map:

ClusterManager mClusterManager = new ClusterManager<OurClusterItem>(getActivity(), getMap());
mClusterManager.setOnClusterItemClickListener(mClusterItemClickListener);
googleMap.setOnMarkerClickListener(mClusterManager);

So, can someone offer solution for this? Thanks!

解决方案

So, I found solution for it - maybe this also will helps to someone.

So, at first, we need to use our custom renderer (inherited from DefaultClusterRenderer). DefaultClusterRenderer has his own cache that contains pairs of ClusterItem and corresponding Marker:

public MarkerCache<T> mMarkerCache = new MarkerCache<T>();

so I wrote the next method in our CustomClusterRenderer

public Marker getMarker(OurClusterItem clusterItem) {
    return mMarkerCache.get(clusterItem);
}

After it, I've added to our fragment 2 variables:

private Marker mCurrentSelectedMarker;
private ClusterStore mCurrentSelectedClusterItem;

and change implementation for 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;
    }
};

That's all, and it works like a charm.

这篇关于如何更改标记图标它被点击了什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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