2

我目前正在使用最新的osmdroid库 (3.0.10) 在带有ItemizedOverlay. 我已经扩展了 Drawable 类来实现我自己的绘图。但是我drawables的绘制不正确。我绘制了一个位图图像、一个圆圈和一个文本。位图已绘制,但圆圈和文本不可见。当我在 中使用相同的可绘制对象时imageview,一切正常。

这是我的drawable的onDraw方法的代码:

@Override
public void draw(Canvas canvas) {
    canvas.save();
    canvas.translate(getBounds().left, getBounds().top);
    //this draws fine
    canvas.drawBitmap(bitmap, new Rect(0,0,bitmap.getWidth(),bitmap.getHeight()), new Rect(0,0,mWidth,mWidth), mPaint);
    //this is not
    canvas.drawCircle(mHeight/2, mHeight/2, mHeight/2, mPaint);
    //neither
    canvas.drawText("X", mHeight/2, mHeight/2, mPaint2);
    canvas.restore();
}

我尝试在位图上绘制圆圈和文本,然后在提供的画布上绘制。它正在工作,但这会扼杀整个要点。

任何帮助表示赞赏。

4

2 回答 2

0

在浏览 osmdroid 资源一天后,我设法解决了我的问题,但一开始还没有找到它们存在的原因。Osmdroid 使用 ISafeCanvas 接口(和 SafeTranslatedCanvas 实现)来包装画布以处理一些高缩放级别的翻译故障。虽然我没有在代码中发现任何直接错误,但我绕过了绘制叠加层时的机制,方法是覆盖 ItemizedOverlay 的 draw 方法并制作我自己的 ISafeCanvas 实现,它只在 getSafeCanvas 方法中返回封装的画布,现在一切看起来都很好.

@Override
protected void draw(Canvas canvas, MapView mv, boolean shadow) {
    drawSafe(new MyCanvas(canvas),mv,shadow);
}

这远非最佳解决方案,SafeCanvas 的存在是有原因的,所以如果使用这种方法,我建议进行彻底的测试。

注意:我只使用了 Android 4.1.1,不知道其他设备是否存在此问题。

于 2013-06-02T09:38:28.103 回答
0

请查看第 427 期。基本上你想使用:

canvas.getUnsafeCanvas(new UnsafeCanvasHandler() {
                             // Draw circle and text here
                             // (but not drawBitmap)
            });

密切关注票证以获得更永久的解决方案。

于 2013-06-04T14:21:24.967 回答