Android Google Map使用自定义标记在多个覆盖图上绘制文本
我需要在一个自定义标记上绘制文本,它的数量相当多。但问题是,当我在“覆盖的绘制”中绘制文本时,所有覆盖项文本都显示在标记上方的一个图层中,并且在放大或缩小地图时似乎不同步。之前,我在添加每个项目时调用了populate,虽然效果很好,但速度太慢。有什么帮助吗 在从ItemizeOverlay扩展而来的自定义类中,构造函数如下所示,其中我设置了自定义标记:Android Google Map使用自定义标记在多个覆盖图上绘制文本,android,google-maps,Android,Google Maps,我需要在一个自定义标记上绘制文本,它的数量相当多。但问题是,当我在“覆盖的绘制”中绘制文本时,所有覆盖项文本都显示在标记上方的一个图层中,并且在放大或缩小地图时似乎不同步。之前,我在添加每个项目时调用了populate,虽然效果很好,但速度太慢。有什么帮助吗 在从ItemizeOverlay扩展而来的自定义类中,构造函数如下所示,其中我设置了自定义标记: public HotelMapFilterOverlay(Drawable defaultMarker, final Context
public HotelMapFilterOverlay(Drawable defaultMarker, final Context con) {
super(boundCenterBottom(defaultMarker));
this.marker = defaultMarker;
this.con = con;
}
覆盖的绘制方法如下所示:
@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
super.draw(canvas, mapView, shadow);
Bitmap bmp = ((BitmapDrawable) marker).getBitmap();
Paint textPaint = new Paint();
textPaint.setColor(Color.WHITE);
textPaint.setTextSize(16f);
textPaint.setTypeface(Typeface.create(Typeface.SANS_SERIF, 1));
textPaint.setStyle(Paint.Style.FILL);
Point screenPts = new Point();
float bmpWidth = bmp.getWidth();
float bmpHeight = bmp.getHeight();
float left;
float top;
int total = mOverlayItems.size();
for (int index = 0; index < total; index++) {
gp = mOverlayItems.get(index).getPoint();
mapView.getProjection().toPixels(gp, screenPts);
left = screenPts.x - (bmpWidth / 2);
top = screenPts.y - bmpHeight;
// draw text
this.title = mOverlayItems.get(index).getTitle();
canvas.drawText(this.title, left + 8, top + 30,textPaint);
}
}
要使标记文字单独显示在每个标记上,而不在标记上分层,您需要自己绘制标记并删除
super.draw(画布、地图视图、阴影)
要绘制标记,您已经有了大部分代码!只需创建一个新的Paint markerPaint=new Paint()
对象,并在绘制文本之前在for循环中添加以下内容:
canvas.drawBitmap(bmp, screenPts.x-(bmp.getWidth()/2), screenPts.y-(bmp.getHeight()), markerPaint);
通过这种方式绘制标记,然后在顶部绘制其文本
关于“填充”,您应该在将所有项目添加到ItemizedOverlay后调用它。要使标记文本单独显示在每个标记上,而不将所有标记分层在标记上,您需要自己绘制标记并删除
super.draw(画布、地图视图、阴影)
要绘制标记,您已经有了大部分代码!只需创建一个新的Paint markerPaint=new Paint()
对象,并在绘制文本之前在for循环中添加以下内容:
canvas.drawBitmap(bmp, screenPts.x-(bmp.getWidth()/2), screenPts.y-(bmp.getHeight()), markerPaint);
通过这种方式绘制标记,然后在顶部绘制其文本
关于“填充”,您应该在将所有项目添加到ItemizedOverlay后立即调用它。谢谢,这正是我一直在寻找的!“要使您的标记文本在每个标记上单独显示,而不将所有标记分层,您需要自己绘制标记并删除super.draw(画布、地图视图、阴影)。”谢谢,这正是我一直在寻找的!要使标记文字单独显示在每个标记上,而不在标记上分层,您需要自己绘制标记并删除super.draw(画布、地图视图、阴影)