【问题标题】:Is there a way to draw a filled area with Canvas without using Path?有没有办法在不使用路径的情况下用画布绘制填充区域?
【发布时间】:2015-05-09 06:53:59
【问题描述】:

我想知道是否有在不使用Path 类并调用canvas.drawPath(...) 的情况下使用Android Canvas 绘制填充区域(如填充多边形)的方法

我想在没有Path 的情况下这样做的原因是因为我必须绘制非常大的数据集,而canvas.drawPath(...) 没有硬件加速,因此速度很慢。

由于硬件加速,使用canvas.drawLines(...) 时的性能要好得多,但是我还没有找到一种方法来绘制使用这种方法填充的多边形(即使线条全部连接)。

使用drawLines(...) 时,即使调用paint.setStyle(Style.FILL) 也不会填充多边形。

有没有不使用Path 方法来绘制填充多边形的方法?

或者有没有其他方法使用Canvas提高性能?

【问题讨论】:

  • 您的view 是否具有交互性(您是否对数据集进行了动态更改需要渲染)?简单地将数据集绘制到canvas 一次很慢?
  • 我的视图是交互式的,因此会不断刷新,我已经在使用缓冲机制,大大提高了性能。但是,我还不满意。
  • 我的最后一个问题是详细回答。当您的数据集发生更改时,您是再次绘制整个数据集还是仅绘制更改区域中受影响的数据集?我的意思是,你已经在使用view.invalidate(Rect dirty)了吗?这只是提高性能的一个提示。
  • 这实际上是一个非常好的主意。但我认为它不能在我的情况下使用,因为我正在绘制图表并且当它是例如放大和滚动,整个视图需要刷新。
  • 你想开始对话吗?我在 android 绘图应用程序上工作并遇到了一些这样的问题。如果你愿意,我可以分享一些我的“诀窍”。

标签: android android-canvas custom-draw


【解决方案1】:

您可能希望查看 opengl 视图并将其用于您需要的所有绘图。肯定会很快。尽管如此,您所有的绘图代码都需要重新编写。

【讨论】:

  • 没有真正回答这个问题,这是专门要求使用Canvas的解决方案。
  • 是的,我知道 OpenGL ES 更快。但是,这不是我的选择。
【解决方案2】:

您可能需要执行以下操作:

Paint red = new Paint();

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

并为您的路径使用此颜色,而不是您的 ARGB。确保路径的最后一点在第一个点结束,这也很有意义。

【讨论】:

    猜你喜欢
    • 2021-11-12
    • 2021-08-12
    • 1970-01-01
    • 2013-03-26
    • 2013-10-16
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    • 2017-03-24
    相关资源
    最近更新 更多