Google 在 Android 上映射带有聚类的自定义标记图标
Google maps custom marker icon with clustering on Android
的代码
这是我activity
中的代码
private void setUpClusterer() {
mClusterManager = new ClusterManager<StoreItem>(this, mMap);
mMap.setOnCameraChangeListener(mClusterManager);
mMap.setOnMarkerClickListener(mClusterManager);
}
public void addItems(List<Store> stores) {
for (Store store : stores) {
mClusterManager.addItem(new StoreItem(store.getImage(), store.getLocation().getLatitude(), store.getLocation().getLongitude()));
}
}
private void removeAllItems() {
mClusterManager.clearItems();
}
这是 StoreItem Class
public class StoreItem implements ClusterItem {
private String url;
private final LatLng mPosition;
public StoreItem(String url, double lat, double lng) {
this.url = url;
mPosition = new LatLng(lat, lng);
}
@Override
public LatLng getPosition() {
return mPosition;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
现在,我想通过 StoreItem class 中的 url 参数更改标记图标。
我该怎么做?
考虑覆盖 onBeforeClusterRendered。类似的东西会起作用:
BitmapDescriptor descriptor = BitmapDescriptorFactory.fromBitmap(here_goes_your_bitmap);
markerOptions.icon(descriptor);
请记住,代码仅供示例使用。您必须手动将文本添加到位图并添加一些缓存机制以供实际使用。您可以查看 DefaultClusterRenderer 的源代码作为示例。
你需要@override DefaultClusterRenderer 的 onBeforeClusterItemRendered() 方法 class
将 onBeforeClusterItemRendered 中的 iconurl 设置为 markerOptions 请找到以下代码:
private class CustomMapClusterRenderer<T extends ClusterItem> extends DefaultClusterRenderer<T> {
CustomMapClusterRenderer(Context context, GoogleMap map, ClusterManager<T> clusterManager) {
super(context, map, clusterManager);
}
@Override
protected boolean shouldRenderAsCluster(Cluster<T> cluster) {
//start clustering if 2 or more items overlap
return cluster.getSize() >= Constants.MINIMUM_CLUSTER_SIZE;
}
@Override
protected void onBeforeClusterItemRendered(T item,
MarkerOptions markerOptions) {
ClusterMarkerItem markerItem = (ClusterMarkerItem) item;
markerOptions.icon(BitmapDescriptorFactory.fromPath(markerItem.getURL()));
}
}
这是我activity
中的代码private void setUpClusterer() {
mClusterManager = new ClusterManager<StoreItem>(this, mMap);
mMap.setOnCameraChangeListener(mClusterManager);
mMap.setOnMarkerClickListener(mClusterManager);
}
public void addItems(List<Store> stores) {
for (Store store : stores) {
mClusterManager.addItem(new StoreItem(store.getImage(), store.getLocation().getLatitude(), store.getLocation().getLongitude()));
}
}
private void removeAllItems() {
mClusterManager.clearItems();
}
这是 StoreItem Class
public class StoreItem implements ClusterItem {
private String url;
private final LatLng mPosition;
public StoreItem(String url, double lat, double lng) {
this.url = url;
mPosition = new LatLng(lat, lng);
}
@Override
public LatLng getPosition() {
return mPosition;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
现在,我想通过 StoreItem class 中的 url 参数更改标记图标。
我该怎么做?
考虑覆盖 onBeforeClusterRendered。类似的东西会起作用:
BitmapDescriptor descriptor = BitmapDescriptorFactory.fromBitmap(here_goes_your_bitmap);
markerOptions.icon(descriptor);
请记住,代码仅供示例使用。您必须手动将文本添加到位图并添加一些缓存机制以供实际使用。您可以查看 DefaultClusterRenderer 的源代码作为示例。
你需要@override DefaultClusterRenderer 的 onBeforeClusterItemRendered() 方法 class 将 onBeforeClusterItemRendered 中的 iconurl 设置为 markerOptions 请找到以下代码:
private class CustomMapClusterRenderer<T extends ClusterItem> extends DefaultClusterRenderer<T> {
CustomMapClusterRenderer(Context context, GoogleMap map, ClusterManager<T> clusterManager) {
super(context, map, clusterManager);
}
@Override
protected boolean shouldRenderAsCluster(Cluster<T> cluster) {
//start clustering if 2 or more items overlap
return cluster.getSize() >= Constants.MINIMUM_CLUSTER_SIZE;
}
@Override
protected void onBeforeClusterItemRendered(T item,
MarkerOptions markerOptions) {
ClusterMarkerItem markerItem = (ClusterMarkerItem) item;
markerOptions.icon(BitmapDescriptorFactory.fromPath(markerItem.getURL()));
}
}