使用自定义标记的多个叠加层上的Android Google地图绘图文字

时间:2011-07-05 12:06:26

标签: android google-maps

我需要在自定义标记上绘制文本,这些标记的数量非常多。但问题是,当我在绘制时在Overridden中绘制文本时,所有叠加项目文本看起来都在标记上方的一层中,并且在放大或缩小地图时似乎不会同步。以前我在添加每个项目时调用populate,这个工作正常,但速度太慢了。有什么帮助吗?

在我从ItemizedOverlay扩展的自定义类中,构造函数如下所示,我在其中设置自定义标记:

    public HotelMapFilterOverlay(Drawable defaultMarker, final Context con) {
    super(boundCenterBottom(defaultMarker));
    this.marker = defaultMarker;
    this.con = con;
}

和重写的draw方法如下:

    @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);          
    }
}

我只调用一次填充来使这个效率像

一样
public void callPopulate(){
   populate();
}

1 个答案:

答案 0 :(得分:1)

要让标记文字在每个标记上单独显示而不是在标记顶部分层,您需要自己绘制标记并删除super.draw(canvas, mapView, shadow)

要绘制标记,您已拥有大部分代码!只需创建一个新的Paint markerPaint = new Paint()对象,然后在绘制文本之前在for循环中添加以下内容:

canvas.drawBitmap(bmp, screenPts.x-(bmp.getWidth()/2), screenPts.y-(bmp.getHeight()), markerPaint);

这样绘制标记然后将其文本绘制在顶部。

关于'populate',您应该在将所有项目添加到ItemizedOverlay后立即调用它。