有没有一种不使用Path的方式在Canvas上绘制填充区域?

7
我想知道是否有一种方法可以在Android Canvas中绘制填充区域(如填充多边形)而不使用Path类和调用canvas.drawPath(...)。
我不想使用Path的原因是因为我必须绘制非常大的数据集,而canvas.drawPath(...)没有硬件加速,因此很慢。
使用canvas.drawLines(...)时性能要好得多,因为它具有硬件加速,但是我没有找到一种方法来使用这种方法绘制填充的多边形(即使所有线都连接)。
即使调用paint.setStyle(Style.FILL),在使用drawLines(...)时也无法填充多边形。
有没有一种方法可以在不使用Path的情况下绘制填充多边形?
或者有没有其他方法可以提高Canvas的性能?

你的“视图”是否是交互式的(是否需要实时渲染数据集的更改)?仅在画布上绘制一次数据集速度较慢吗? - tato.rodrigo
我的视图是交互式的,因此会不断刷新。我已经使用了缓冲机制,大大提高了性能。但是,我还不满意。 - Philipp Jahoda
这实际上是一个非常好的想法。但我认为它在我的情况下无法使用,因为我正在绘制图表,当它被缩放并滚动时,整个视图需要刷新。 - Philipp Jahoda
你想开始一次交流吗?我曾经在 Android 绘图应用上遇到过类似的问题。如果你需要,我可以分享一些我的“诀窍”。 - tato.rodrigo
当然,那就太好了 :-) - Philipp Jahoda
显示剩余2条评论
2个回答

0

你可能需要做类似这样的事情:

Paint red = new Paint();

red.setColor(android.graphics.Color.RED);
red.setStyle(Paint.Style.FILL);

使用这个颜色来绘制你的路径,而不是使用ARGB。确保路径的最后一个点与第一个点相连,这也是有意义的。


0

你可能想要查看OpenGL视图,并将其用于您需要的所有绘图。肯定会非常快速。不过,您所有的绘图代码都需要重新编写。


3
并没有真正回答问题,问题明确要求使用“Canvas”来解决。 - ci_
1
是的,我知道OpenGL ES更快。然而,这对我来说不是一个选择。 - Philipp Jahoda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接