我目前正在使用最新的osmdroid
库(3.0.10)在带有ItemizedOverlay
的地图上显示自定义标记。我已经扩展了Drawable类来实现我自己的绘图。但是我的drawables
未正确绘制。我将位图图像,圆圈和文本绘制在一起。绘制位图,但圆圈和文本不可见。当我在imageview
中使用相同的drawable时,一切正常。
这是我的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();
}
我尝试在位图上绘制圆圈和文本,然后在提供的画布上绘制它。它的工作正在发挥作用,但却终结了整个问题。
感谢任何帮助。
答案 0 :(得分:0)
经过一天的osmdroid消息来源后,我设法解决了我的问题,但没有找到他们为什么在那里。 Osmdroid使用ISafeCanvas接口(和SafeTranslatedCanvas实现)来包装画布来处理一些高缩放级别的转换故障。虽然我没有在代码中发现任何直接的错误,但是在通过覆盖ItemizedOverlay的draw方法并制作我自己的ISafeCanvas实现来绘制覆盖时绕过了机制,它只返回封装的canvas中的getSafeCanvas方法,现在一切看起来都很好
@Override
protected void draw(Canvas canvas, MapView mv, boolean shadow) {
drawSafe(new MyCanvas(canvas),mv,shadow);
}
这远非一个最好的解决方案,SafeCanvas是有原因的,所以如果使用这种方法,我建议进行彻底的测试。
注意:我只使用Android 4.1.1,并且不知道其他设备上是否存在此问题。
答案 1 :(得分:0)
请查看Issue 427。基本上你想要使用:
canvas.getUnsafeCanvas(new UnsafeCanvasHandler() {
// Draw circle and text here
// (but not drawBitmap)
});
密切关注更持久的解决方案。