2016-03-21 2 views

ответ

0

Вы можете реализовать ClusterRenderer для настройки рендеринга кластеров. DefaultClusterRenderer обеспечивает хорошую базу для начала. Подклассифицируя DefaultClusterRenderer, вы можете переопределить значения по умолчанию.

Для подробного примера настройки ознакомьтесь с CustomMarkerClusteringDemoActivity в demo app, который поставляется с библиотекой утилиты.

Source

4
public class MyClusterItemRenderer extends DefaultClusterRenderer<MyClusterItem> { 

    private final IconGenerator mIconGenerator; 
    private final ShapeDrawable mColoredCircleBackground; 
    private final float mDensity; 

    private SparseArray<BitmapDescriptor> mIcons = new SparseArray(); 

    public MyClusterItemRenderer(Context context, GoogleMap map, ClusterManager<MyClusterItem> clusterManager) { 
     super(context, map, clusterManager); 
     mIconGenerator = new IconGenerator(context); 
     mColoredCircleBackground = new ShapeDrawable(new OvalShape()); 
     mDensity = context.getResources().getDisplayMetrics().density; 

     SquareTextView squareTextView = new SquareTextView(context); 
     ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(-2, -2); 
     squareTextView.setLayoutParams(layoutParams); 
     squareTextView.setId(com.google.maps.android.R.id.text); 
     int twelveDpi = (int)(12.0F * this.mDensity); 
     squareTextView.setPadding(twelveDpi, twelveDpi, twelveDpi, twelveDpi); 
     this.mIconGenerator.setContentView(squareTextView); 

     mIconGenerator.setTextAppearance(com.google.maps.android.R.style.ClusterIcon_TextAppearance); 

     ShapeDrawable outline = new ShapeDrawable(new OvalShape()); 
     outline.getPaint().setColor(Color.parseColor("#FFFFFF")); 
     LayerDrawable background = new LayerDrawable(new Drawable[]{outline, this.mColoredCircleBackground}); 
     int strokeWidth = (int) (this.mDensity * 3.0F); 
     background.setLayerInset(1, strokeWidth, strokeWidth, strokeWidth, strokeWidth); 
     mIconGenerator.setBackground(background); 

    } 



    @Override 
    protected void onBeforeClusterRendered(Cluster<MyClusterItem> 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(String.valueOf(cluster.getSize()))); 
      this.mIcons.put(bucket, descriptor); 
     } 

     markerOptions.icon(descriptor); 
    } 
} 

на активность:

clusterManager.setRenderer(new MyClusterItemRenderer(getApplicationContext(), mGoogleMap, clusterManager)); 
Смежные вопросы