2016-08-18 94 views
0

我试图在地图上设置动态自定义标记,但它不起作用,而是显示默认标记。我在哪里错了?MapBox自定义标记不起作用

IconFactory iconFactory = IconFactory.getInstance(MainActivity.this); 
TextDrawable iconDrawable = new TextDrawable("CD"); 
Icon icon = iconFactory.fromDrawable(iconDrawable); 

MarkerOptions marker = new MarkerOptions() 
    .position(new LatLng(location.latitude, location.longitude)) 
    .icon(icon) 

mapboxMap.addMarker(marker); 

TextDrawable:

public class TextDrawable extends Drawable { 

    private final String text; 
    private final Paint paint; 

    public TextDrawable(String text) { 

     this.text = text; 

     this.paint = new Paint(); 
     paint.setColor(Color.WHITE); 
     paint.setTextSize(22f); 
     paint.setAntiAlias(true); 
     paint.setFakeBoldText(true); 
     paint.setStrokeWidth(2); 
     paint.setStyle(Paint.Style.FILL); 
     paint.setTextAlign(Paint.Align.LEFT); 
    } 

    @Override 
    public void draw(Canvas canvas) { 
     canvas.drawText(text, 0, 0, paint); 
    } 

    @Override 
    public void setAlpha(int alpha) { 
     paint.setAlpha(alpha); 
    } 

    @Override 
    public void setColorFilter(ColorFilter cf) { 
     paint.setColorFilter(cf); 
    } 

    @Override 
    public int getOpacity() { 
     return PixelFormat.TRANSLUCENT; 
    } 
} 

回答

1

使用此代码:

Marker myLocMarker = map.addMarker(new MarkerOptions() 
      .position(myLocation) 
      .icon(BitmapDescriptorFactory.fromBitmap(writeTextOnDrawable(R.drawable.bluebox, "your text goes here")))); 

蓝盒只是一个我们将作为背景

private Bitmap writeTextOnDrawable(int drawableId, String text) { 

    Bitmap bm = BitmapFactory.decodeResource(getResources(), drawableId) 
      .copy(Bitmap.Config.ARGB_8888, true); 

    Typeface tf = Typeface.create("Helvetica", Typeface.BOLD); 

    Paint paint = new Paint(); 
    paint.setStyle(Style.FILL); 
    paint.setColor(Color.WHITE); 
    paint.setTypeface(tf); 
    paint.setTextAlign(Align.CENTER); 
    paint.setTextSize(convertToPixels(context, 11)); 

    Rect textRect = new Rect(); 
    paint.getTextBounds(text, 0, text.length(), textRect); 

    Canvas canvas = new Canvas(bm); 

    //If the text is bigger than the canvas , reduce the font size 
    if(textRect.width() >= (canvas.getWidth() - 4))  //the padding on either sides is considered as 4, so as to appropriately fit in the text 
     paint.setTextSize(convertToPixels(context, 7));  //Scaling needs to be used for different dpi's 

    //Calculate the positions 
    int xPos = (canvas.getWidth()/2) - 2;  //-2 is for regulating the x position offset 

    //"- ((paint.descent() + paint.ascent())/2)" is the distance from the baseline to the center. 
    int yPos = (int) ((canvas.getHeight()/2) - ((paint.descent() + paint.ascent())/2)) ; 

    canvas.drawText(text, xPos, yPos, paint); 

    return bm; 
} 



public static int convertToPixels(Context context, int nDP) 
{ 
    final float conversionScale = context.getResources().getDisplayMetrics().density; 

    return (int) ((nDP * conversionScale) + 0.5f) ; 

} 
+0

感谢胡安用一个矩形的资源!正是我需要的。 – doovers