Вы можете сделать это за 3 шага:
1) форматировать String
с текстом маркера:
public String formatText(String text) {
return String.format("<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" xmlns=\"http://www.w3.org/2000/svg\">\n" +
" <circle cx=\"20\" cy=\"20\" r=\"20\" fill=\"#FFFFFF\" stroke=\"#000000\" stroke-width=\"1\"/>\n" +
" <text fill=\"#FF0000\" font-size=\"12\" x=\"8\" y=\"24\">%s</text>\n" +
"</svg>", text);
}
2) создать растровое изображение из целевого SVG String
, например, через SVG.renderToPicture()
метод AndroidSVG библиотека:
public Bitmap renderToBitmap(String svgString, int requiredWidth) {
Bitmap bitmap = null;
SVG svg = null;
try {
svg = SVG.getFromString(svgString);
if (requiredWidth < 1) requiredWidth = (int)svg.getDocumentWidth();
float scaleFactor = (float)requiredWidth / (float)svg.getDocumentWidth();
int adjustedHeight = (int)(scaleFactor * svg.getDocumentHeight());
bitmap = Bitmap.createBitmap(requiredWidth, adjustedHeight, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
canvas.drawPicture(svg.renderToPicture(), new Rect(0, 0, requiredWidth, adjustedHeight));
} catch (SVGParseException e) {
e.printStackTrace();
}
return bitmap;
}
3) добавьте его в качестве значка маркера:
mGoogleMap.addMarker(new MarkerOptions()
.position(<POSITION>)
.icon(BitmapDescriptorFactory.fromBitmap(renderToBitmap(formatText("text"), <ICON_WIDTH_IN_PIXELS>)))
.anchor(0.5f, 0.5f));