【问题标题】:Strange drawing artefact using custom drawable with MapView使用带有 MapView 的自定义可绘制对象的奇怪绘图工件
【发布时间】:2011-04-02 21:47:16
【问题描述】:

我正在尝试添加自己的可绘制对象并将其用于 MapView 上的一系列叠加层。可绘制对象基本上是一个带有黑色轮廓和中间数字的圆形框。

我已经设法使用下面的代码实现了这一点,但是在我的盒子左侧有一个看起来像标志的东西,我当然不认为我已经画了 - 所以我想知道它可能是什么。

这是图片的示例:


编辑 - 如果画了一个圆圈会发生以下情况:


我的代码如下:

自定义可绘制对象:

public class BikeDrawable extends Drawable {
  int colour;
  String bikes;

public BikeDrawable (int bikes){
    this.bikes = Integer.toString(bikes);
    if (bikes < 4) {
        colour = Color.RED;
    }
    else if (bikes > 3 && bikes < 9){
        colour = Color.argb(244, 255, 127, 42);
    }
    else {
        colour = Color.GREEN;
    }
}
@Override
public void draw(Canvas canvas) {
      Paint rectanglePaint = new Paint();
      rectanglePaint.setColor(colour);
      rectanglePaint.setStyle(Style.FILL);
      RectF rectangle = new RectF(0.0f, 0.0f, 20.0f, 20.0f);
      Paint strokepaint = new Paint();
      strokepaint.setStyle(Paint.Style.STROKE);
      strokepaint.setStrokeWidth(2);
      strokepaint.setARGB(255, 0, 0, 0);

      canvas.drawRoundRect(rectangle, 4.0f, 4.0f, rectanglePaint);
      canvas.drawRoundRect(rectangle, 4.0f, 4.0f, strokepaint);

      Paint textpaint = new Paint();
      textpaint.setARGB(255, 0, 0, 0);
      textpaint.setTextAlign(Paint.Align.CENTER);
      canvas.drawText(bikes, 10, 14, textpaint);
}

@Override
public int getOpacity() {
    return 0;
}

@Override
public void setAlpha(int alpha) {
}

@Override
public void setColorFilter(ColorFilter cf) {
}

}

在地图视图中使用:

bikeOverlay = new PointsOverlay(start_icon);
BikeDrawable start_1_drawable = new BikeDrawable (start_1.capacity);
OverlayItem start_1_overlayitem = new OverlayItem(new GeoPoint(start_1.lat,start_1.lon), null, null);
start_1_overlayitem.setMarker(start_1_drawable);
mapOverlays.add(bikeOverlay);
bikeOverlay.addOverlay(start_1_overlayitem);

有人知道这里发生了什么吗?它是来自 OverlayItem 的人工制品吗?

【问题讨论】:

  • 很好奇。如果您将调用从 drawRoundedRect 更改为其他内容(例如圆形),您仍然看到问题吗?
  • 是的,同样的事情发生了,只是更循环。我会将图形添加到原始查询中
  • OverlayItem 可以绘制阴影,这可能是导致您的问题的原因。尝试关闭它,我认为它可能。虽然我想这已经解决了没有或没有人在乎。
  • 感谢 etteyafed - 解决了它。如果你想提交一个正确的答案,我可以给你信用。谢谢

标签: android android-mapview drawable


【解决方案1】:

这是通过覆盖 PointsOverlay 的 draw() 方法实现的,如下所示:

@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow)
{
    if(!shadow)
    {
        super.draw(canvas, mapView, false);
    }
}

感谢 etteyafed - 如果你回答了,我会为你加分,但我想关闭它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    相关资源
    最近更新 更多