2017-01-03 4 views
1

AndroidスタジオのGoogleマップのクラスタリングライブラリに少し問題があります。 問題は、these iconsのようなクラスタオブジェクトのデフォルトのアイコンしかないことです。java googleマップのクラスタオブジェクトのアイコンを変更するには

私はマーカーにカスタムアイコンを与えたいと思いますが、インターネット上でそれについて何も見つけられません。そして、私はそれがlibrary pageであまりにも不明であることがわかります。

ありがとうございます!

+0

あなたが参照したページの下に移動します。あなたは解決策を見つけるでしょう – xxlali

+0

あなたの問題のための非常に良い解決策はここにありますhttp://stackoverflow.com/questions/41443749/how-do-i-change-the-icons-for-the-cluster-objects-in-java -google-maps – Shivo

+0

@Shivo私の質問 –

答えて

0

解決策を見つけました。ここにあります:

@Override 
protected void onBeforeClusterRendered(Cluster<MyItem> cluster, MarkerOptions markerOptions) 
{ 

    final Drawable clusterIcon = ContextCompat.getDrawable(MainActivity.context,R.drawable.[your_icon]); 

    mClusterIconGenerator.setBackground(clusterIcon); 

    //modify padding for one or two digit numbers 
    if (cluster.getSize() < 10) { 
     mClusterIconGenerator.setContentPadding(40, 20, 0, 0); 
    } 
    else 
    { 
     mClusterIconGenerator.setContentPadding(30, 20, 0, 0); 
    } 

    Bitmap icon = mClusterIconGenerator.makeIcon(String.valueOf(cluster.getSize())); 
    markerOptions.icon(BitmapDescriptorFactory.fromBitmap(icon)); 

} 

これは私のために働いた。あなたはビットマップを使用して、あなたの活動にごクラスタ
のカスタムビューを描くことができます

-1

@Override 
    protected void onBeforeClusterRendered(Cluster<Asset> cluster, MarkerOptions markerOptions) { 
     //Draw 
     values = calculateData(values); 
     PieChart pieChart = new PieChart(values, realValues); 
     mClusterImageView.setImageDrawable(pieChart); 
     Bitmap icon = mClusterIconGenerator.makeIcon(cluster.getSize() + ""); 
     markerOptions.icon(BitmapDescriptorFactory.fromBitmap(icon)).anchor(.5f, .5f); 
    } 

たとえば、あなたがここでクラスタ
ための円グラフを描くことができ、コードです:

public class PieChart extends Drawable { 
private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); 
private float[] value_degree; 
private final float[] value_real; 
private int[] COLORS = {0xFF74E370, 0xFF54B8FF, 0xFFFF5754, 0xFF939393}; 
RectF rectf = new RectF(convertDpToPixel(20),convertDpToPixel(17),convertDpToPixel(80), convertDpToPixel(57)); 
RectF rect = new RectF(convertDpToPixel(20),convertDpToPixel(17),convertDpToPixel(80), convertDpToPixel(67)); 
int temp = 0; 

public PieChart(float[] values, float[] realValues) { 
    value_degree = new float[]{values[0], values[1], values[2], values[3]}; 
    value_real = new float[]{realValues[0], realValues[1], realValues[2], realValues[3]}; 
} 

@Override 
public void draw(Canvas canvas) { 
    paint.setColor(Color.BLACK); 
    paint.setShadowLayer(10.0f, 0.0f, 2.0f, 0xFF000000); 
    paint.setStrokeWidth(100); 
    paint.setColor(0xAA777777); 
    canvas.drawOval(rect, paint); 

    for (int i = 0; i < value_degree.length; i++) { 
     if (i == 0) { 
      paint.setShadowLayer(10.0f, 0.0f, 2.0f, 0xFF000000); 
      paint.setStrokeWidth(1); 
      paint.setColor(COLORS[i]); 
      canvas.drawArc(rectf, 0, value_degree[i], true, paint); 
      paint.setColor(Color.BLACK); 
      paint.setTextSize(convertDpToPixel(13)); 
      if (value_real[i] != 0) { 
       double x = 40 * Math.cos(Math.toRadians(value_degree[i]/2)) + 40; 
       double y = 35 * Math.sin(Math.toRadians(value_degree[i]/2)) + 40; 
       canvas.drawText((int) value_real[i]+"", convertDpToPixel((float) x), convertDpToPixel((float) y), paint); 
      } 
     } else { 
      paint.setShadowLayer(10.0f, 0.0f, 2.0f, 0xFF000000); 
      temp += (int) value_degree[i - 1]; 
      paint.setColor(COLORS[i]); 
      canvas.drawArc(rectf, temp, value_degree[i], true, paint); 
      paint.setColor(Color.BLACK); 
      paint.setTextSize(convertDpToPixel(13)); 
      if (value_real[i] != 0) { 
       double x = 40 * Math.cos(Math.toRadians(temp + (value_degree[i]/2))) +40; 
       double y = 35 * Math.sin(Math.toRadians(temp + (value_degree[i]/2))) + 45; 
       canvas.drawText((int) value_real[i] + "", convertDpToPixel((float) x), convertDpToPixel((float) y), paint); 
      } 
     } 
    } 
} 
} 

上記のコードのソースは次のとおりです。
Google Maps Android 3D Pie Chart Marker Clustering Java

関連する問題