更改android中未群集的标记的颜色或图像

更改android中未群集的标记的颜色或图像,android,google-maps,markerclusterer,Android,Google Maps,Markerclusterer,我想改变未被聚集的标记的颜色,并在地图上显示为单个标记。 我尝试了android的一个演示项目的代码,但我无法在我的代码中使用它。我更改了一个标记的图标,它在任何地方都会被更改,集群就会消失。 这是我试图使用的原始代码 (仅代码中的相关部分) 公共类CustomMarkerClusteringDemoActivity扩展BaseDemoActivity实现ClusterManager.OnClusterClickListener、ClusterManager.onClusterInfo窗口Cli

我想改变未被聚集的标记的颜色,并在地图上显示为单个标记。 我尝试了android的一个演示项目的代码,但我无法在我的代码中使用它。我更改了一个标记的图标,它在任何地方都会被更改,集群就会消失。 这是我试图使用的原始代码 (仅代码中的相关部分)

公共类CustomMarkerClusteringDemoActivity扩展BaseDemoActivity实现ClusterManager.OnClusterClickListener、ClusterManager.onClusterInfo窗口ClickListener、ClusterManager.OnClusterItemClickListener、ClusterManager.onClusterInfo窗口ClickListener{
私人群集管理器McClusterManager;
私人随机mRandom=新随机(1984年);
/**
*在标记内绘制纵断面照片(使用IconGenerator)。
*当群集中有多人时,绘制多张照片(使用MultiDrawable)。
*/
私有类PersonRenderer扩展了DefaultClusterRenderer{
私有最终IconGenerator mIconGenerator=新IconGenerator(getApplicationContext());
专用最终IconGenerator mClusterIconGenerator=新IconGenerator(getApplicationContext());
私有最终图像视图mImageView;
私有最终图像视图mClusterImageView;
私人最终尺寸;
公众人物{
super(getApplicationContext()、getMap()、mClusterManager);
View multiProfile=GetLayoutFlater()。充气(R.layout.multi_profile,null);
setContentView(多功能文件);
mClusterImageView=(ImageView)multiProfile.findViewById(R.id.image);
mImageView=newimageview(getApplicationContext());
mDimension=(int)getResources().getdimen(R.dimen.custom\u profile\u image);
mImageView.setLayoutParams(新视图组.LayoutParams(MDiDimension,MDiDimension));
int padding=(int)getResources().getDimension(R.dimen.custom_profile_padding);
setPadding(padding,padding,padding,padding);
setContentView(mImageView);
}
@凌驾
PreforeClusterItemRendered上的受保护无效(Person Person,MarkeOptions MarkeOptions){
//画一个人。
//设置“信息”窗口以显示其名称。
setImageResource(person.profilePhoto);
位图图标=micongGenerator.makeIcon();
markerOptions.icon(BitmapDescriptorFactory.fromBitmap(icon)).title(person.name);
}
@凌驾
在呈现群集之前受保护的void(群集群集、标记选项标记选项){
//画多个人。
//注意:此方法在UI线程上运行。不要在这里花费太多时间(如本例中)。
List profilePhotos=newarraylist(Math.min(4,cluster.getSize());
整数宽度=MDI尺寸;
int高度=MDI尺寸;
for(Person p:cluster.getItems()){
//最多抽4分。
如果(profilePhotos.size()=4)中断;
Drawable Drawable=getResources().getDrawable(p.profilePhoto);
可拉伸立根(0,0,宽度,高度);
profilePhotos.add(可绘制);
}
MultiDrawable MultiDrawable=新的MultiDrawable(profilePhotos);
多重可拉伸。立根(0,0,宽度,高度);
mClusterImageView.setImageDrawable(multiDrawable);
位图icon=mClusterIconGenerator.makeIcon(String.valueOf(cluster.getSize());
图标(BitmapDescriptorFactory.fromBitmap(图标));
}
有人能简化或解释这个过程是如何工作的吗

这是我在反编译DefaultClusterRender类后找到的onBeforeClusterRendered的代码

protected void onBeforeClusterRendered(Cluster<T> cluster, MarkerOptions markerOptions) {
    int bucket = this.getBucket(cluster);
    BitmapDescriptor descriptor = (BitmapDescriptor)this.mIcons.get(bucket);
    if(descriptor == null) {
        this.mColoredCircleBackground.getPaint().setColor(this.getColor(bucket));
        descriptor = BitmapDescriptorFactory.fromBitmap(this.mIconGenerator.makeIcon(this.getClusterText(bucket)));
        this.mIcons.put(bucket, descriptor);
    }

    markerOptions.icon(descriptor);
}
BeforeClusterRendered上受保护的void(群集、标记选项标记选项){
int bucket=this.getBucket(集群);
BitmapDescriptor描述符=(BitmapDescriptor)this.mIcons.get(bucket);
if(描述符==null){
this.mColoredCircleBackground.getPaint().setColor(this.getColor(bucket));
descriptor=BitmapDescriptorFactory.fromBitmap(this.micongGenerator.makeIcon(this.getClusterText(bucket)));
this.mIcons.put(bucket,descriptor);
}
标记选项。图标(描述符);
}
但我一点也不明白

protected void onBeforeClusterRendered(Cluster<T> cluster, MarkerOptions markerOptions) {
    int bucket = this.getBucket(cluster);
    BitmapDescriptor descriptor = (BitmapDescriptor)this.mIcons.get(bucket);
    if(descriptor == null) {
        this.mColoredCircleBackground.getPaint().setColor(this.getColor(bucket));
        descriptor = BitmapDescriptorFactory.fromBitmap(this.mIconGenerator.makeIcon(this.getClusterText(bucket)));
        this.mIcons.put(bucket, descriptor);
    }

    markerOptions.icon(descriptor);
}