在多边形 android Google 地图 v2 上显示文本
Show text on polygon android Google map v2
我在地图上使用多边形,我想在它们上面添加文字。有什么办法可以做到这一点?
我试图在地图点上放置简单的文本,但没有成功。
private void addPolygon(Region reg) {
PolylineOptions polylineOptions = new PolylineOptions();
ArrayList<LatLng> coordList=reg.getAllPoints();
coordList.add(coordList.get(0));
int regColor = reg.getColor();
String regName = reg.getName();
//want to put a name on region
polylineOptions.addAll(coordList);
polylineOptions
.width(5)
.color(Color.BLACK);
if (regColor != 0)
polylineOptions
.color(regColor);
map.addPolyline(polylineOptions);
//text on shape?
}
您可以创建一个带有自定义图标的 Marker
,然后在该图标上绘制文本。您可以使用这样的方法:
public Marker addText(final Context context, final GoogleMap map,
final LatLng location, final String text, final int padding,
final int fontSize) {
Marker marker = null;
if (context == null || map == null || location == null || text == null
|| fontSize <= 0) {
return marker;
}
final TextView textView = new TextView(context);
textView.setText(text);
textView.setTextSize(fontSize);
final Paint paintText = textView.getPaint();
final Rect boundsText = new Rect();
paintText.getTextBounds(text, 0, textView.length(), boundsText);
paintText.setTextAlign(Align.CENTER);
final Bitmap.Config conf = Bitmap.Config.ARGB_8888;
final Bitmap bmpText = Bitmap.createBitmap(boundsText.width() + 2
* padding, boundsText.height() + 2 * padding, conf);
final Canvas canvasText = new Canvas(bmpText);
paintText.setColor(Color.BLACK);
canvasText.drawText(text, canvasText.getWidth() / 2,
canvasText.getHeight() - padding - boundsText.bottom, paintText);
final MarkerOptions markerOptions = new MarkerOptions()
.position(location)
.icon(BitmapDescriptorFactory.fromBitmap(bmpText))
.anchor(0.5f, 1);
marker = map.addMarker(markerOptions);
return marker;
}
您需要设置标记的位置 LatLng
并且您必须根据 Region
计算它(例如几何的第一个点、最后一个点、随机点,质心,...)。
此外,请注意绘制大量标记会对性能产生负面影响。
如果有人需要,还有 C#/Xamarin 版本:
public Marker AddText(Context context, GoogleMap map, LatLng location, string text, int fontSize)
{
if (text == null)
throw new ArgumentNullException(nameof(text));
if (location == null)
throw new ArgumentNullException(nameof(location));
if (map == null)
throw new ArgumentNullException(nameof(map));
if (context == null)
throw new ArgumentNullException(nameof(context));
if (fontSize <= 0)
throw new ArgumentOutOfRangeException(nameof(fontSize));
var textView = new TextView(context);
textView.Text = text;
textView.TextSize = fontSize;
var paintText = textView.Paint;
var boundsText = new Rect();
paintText.GetTextBounds(text, 0, textView.Length(), boundsText);
paintText.TextAlign = Paint.Align.Center;
paintText.Color = Android.Graphics.Color.Black;
var bmpText = Bitmap.CreateBitmap(boundsText.Width(), boundsText.Height(), Bitmap.Config.Argb8888);
var canvasText = new Canvas(bmpText);
canvasText.DrawText(text, canvasText.Width / 2, canvasText.Height - boundsText.Bottom, paintText);
return map.AddMarker((new MarkerOptions().SetPosition(location).SetIcon(BitmapDescriptorFactory.FromBitmap(bmpText)).Anchor(0.5f, 1)));
}
我在地图上使用多边形,我想在它们上面添加文字。有什么办法可以做到这一点? 我试图在地图点上放置简单的文本,但没有成功。
private void addPolygon(Region reg) {
PolylineOptions polylineOptions = new PolylineOptions();
ArrayList<LatLng> coordList=reg.getAllPoints();
coordList.add(coordList.get(0));
int regColor = reg.getColor();
String regName = reg.getName();
//want to put a name on region
polylineOptions.addAll(coordList);
polylineOptions
.width(5)
.color(Color.BLACK);
if (regColor != 0)
polylineOptions
.color(regColor);
map.addPolyline(polylineOptions);
//text on shape?
}
您可以创建一个带有自定义图标的 Marker
,然后在该图标上绘制文本。您可以使用这样的方法:
public Marker addText(final Context context, final GoogleMap map,
final LatLng location, final String text, final int padding,
final int fontSize) {
Marker marker = null;
if (context == null || map == null || location == null || text == null
|| fontSize <= 0) {
return marker;
}
final TextView textView = new TextView(context);
textView.setText(text);
textView.setTextSize(fontSize);
final Paint paintText = textView.getPaint();
final Rect boundsText = new Rect();
paintText.getTextBounds(text, 0, textView.length(), boundsText);
paintText.setTextAlign(Align.CENTER);
final Bitmap.Config conf = Bitmap.Config.ARGB_8888;
final Bitmap bmpText = Bitmap.createBitmap(boundsText.width() + 2
* padding, boundsText.height() + 2 * padding, conf);
final Canvas canvasText = new Canvas(bmpText);
paintText.setColor(Color.BLACK);
canvasText.drawText(text, canvasText.getWidth() / 2,
canvasText.getHeight() - padding - boundsText.bottom, paintText);
final MarkerOptions markerOptions = new MarkerOptions()
.position(location)
.icon(BitmapDescriptorFactory.fromBitmap(bmpText))
.anchor(0.5f, 1);
marker = map.addMarker(markerOptions);
return marker;
}
您需要设置标记的位置 LatLng
并且您必须根据 Region
计算它(例如几何的第一个点、最后一个点、随机点,质心,...)。
此外,请注意绘制大量标记会对性能产生负面影响。
如果有人需要,还有 C#/Xamarin 版本:
public Marker AddText(Context context, GoogleMap map, LatLng location, string text, int fontSize)
{
if (text == null)
throw new ArgumentNullException(nameof(text));
if (location == null)
throw new ArgumentNullException(nameof(location));
if (map == null)
throw new ArgumentNullException(nameof(map));
if (context == null)
throw new ArgumentNullException(nameof(context));
if (fontSize <= 0)
throw new ArgumentOutOfRangeException(nameof(fontSize));
var textView = new TextView(context);
textView.Text = text;
textView.TextSize = fontSize;
var paintText = textView.Paint;
var boundsText = new Rect();
paintText.GetTextBounds(text, 0, textView.Length(), boundsText);
paintText.TextAlign = Paint.Align.Center;
paintText.Color = Android.Graphics.Color.Black;
var bmpText = Bitmap.CreateBitmap(boundsText.Width(), boundsText.Height(), Bitmap.Config.Argb8888);
var canvasText = new Canvas(bmpText);
canvasText.DrawText(text, canvasText.Width / 2, canvasText.Height - boundsText.Bottom, paintText);
return map.AddMarker((new MarkerOptions().SetPosition(location).SetIcon(BitmapDescriptorFactory.FromBitmap(bmpText)).Anchor(0.5f, 1)));
}