Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Google Map使用自定义标记在多个覆盖图上绘制文本_Android_Google Maps - Fatal编程技术网

Android Google Map使用自定义标记在多个覆盖图上绘制文本

Android Google Map使用自定义标记在多个覆盖图上绘制文本,android,google-maps,Android,Google Maps,我需要在一个自定义标记上绘制文本,它的数量相当多。但问题是,当我在“覆盖的绘制”中绘制文本时,所有覆盖项文本都显示在标记上方的一个图层中,并且在放大或缩小地图时似乎不同步。之前,我在添加每个项目时调用了populate,虽然效果很好,但速度太慢。有什么帮助吗 在从ItemizeOverlay扩展而来的自定义类中,构造函数如下所示,其中我设置了自定义标记: public HotelMapFilterOverlay(Drawable defaultMarker, final Context

我需要在一个自定义标记上绘制文本,它的数量相当多。但问题是,当我在“覆盖的绘制”中绘制文本时,所有覆盖项文本都显示在标记上方的一个图层中,并且在放大或缩小地图时似乎不同步。之前,我在添加每个项目时调用了populate,虽然效果很好,但速度太慢。有什么帮助吗

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

    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(画布、地图视图、阴影)