Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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 Osmdroid自定义标记可抽件罐';不要绘制文本或形状_Android_Drawing_Osmdroid - Fatal编程技术网

Android Osmdroid自定义标记可抽件罐';不要绘制文本或形状

Android Osmdroid自定义标记可抽件罐';不要绘制文本或形状,android,drawing,osmdroid,Android,Drawing,Osmdroid,我目前正在使用最新的osmdroid库(3.0.10)在带有ItemizedOverlay的地图上显示我的自定义标记。我已经扩展了Drawable类来实现我自己的绘图。但是,我的可绘制内容绘制不正确。我画了一个位图图像,一个圆圈和一个文本在彼此的上面。位图已绘制,但圆圈和文本不可见。当我在图像视图中使用相同的绘图工具时,一切正常 以下是我的drawable的onDraw方法的代码: @Override public void draw(Canvas canvas) { canvas.sa

我目前正在使用最新的
osmdroid
库(3.0.10)在带有
ItemizedOverlay
的地图上显示我的自定义标记。我已经扩展了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();
}
我尝试在位图上绘制圆圈和文本,并在提供的画布上绘制。这是可行的,但这扼杀了整个重点


感谢您的帮助

在浏览了一天osmdroid源代码之后,我设法解决了我的问题,但还没有发现它们为什么会出现在那里。Osmdroid使用ISafeCanvas接口(和SafeTranslatedCanvas实现)包装画布,以处理一些高缩放级别的转换故障。虽然我在代码中没有发现任何直接的错误,但在绘制覆盖图时,我绕过了机制,重写了ItemizeOverlay的draw方法,并创建了自己的ISafeCanvas实现,它只在getSafeCanvas方法中返回封装的画布,现在一切看起来都很好

@Override
protected void draw(Canvas canvas, MapView mv, boolean shadow) {
    drawSafe(new MyCanvas(canvas),mv,shadow);
}
这远不是最好的解决方案,SafeCanvas的存在是有原因的,所以我建议使用这种方法进行彻底的测试

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

请查看。基本上,您希望使用:

canvas.getUnsafeCanvas(new UnsafeCanvasHandler() {
                             // Draw circle and text here
                             // (but not drawBitmap)
            });
密切关注问题,寻找更持久的解决方案