在画布上绘制比屏幕大得多的路径

时间:2016-08-30 19:29:54

标签: android android-canvas android-view

我的Android视图大于视图的可见部分(例如10000x6000像素),我想在onDraw()方法中绘制路径。只绘制与视口相交的路径,并且大部分时间都能正常工作,但是当绘制的路径的边界框比视口大得多时,分配的内存太多,并且会因内存不足错误而崩溃应用程序。即使将剪辑边界设置为视口,也会为路径的边界框占用的整个区域分配内存:

Large canvas

在上面的示例中,视口仅为2000x1400像素,但在画布上绘制路径时,会分配内存以适合完整路径(7000x4000像素= 112 MB)。

有没有办法限制在这种情况下分配的内存量?

BTW,iOS确实限制了使用剪辑边界时渲染的光栅图像的大小。

编辑:看起来它是硬件渲染图层的已知问题:https://code.google.com/p/android/issues/detail?id=24023

1 个答案:

答案 0 :(得分:0)

我对这个问题的解决方案可能不是最干净但是做了我需要的。我使用了canvas.drawLines,它没有连接每行之间的交叉点,但工作得很顺利。

canvas.drawLines(pathArray, mDefaultPaint);

通过这种方式,我们可以创建我们的"路径"。

然后将其绘制到画布上,如下所示;

isField

正如我所说的那样,结果将会破坏行之间的联系,但不会有任何问题