如何更改标记图标它被点击了什么? [英] How to change marker icon what it was tapped?
问题描述
在我们的项目中,我们使用谷歌地图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屋!