为什么Canvas.drawPath()如此缓慢?

6

我发现使用Canvas.drawPath(path,paint)比一行一行使用Canvas.drawLine()或者使用Canvas.drawLines()要慢得多。我不能提供确切的性能数据,但是我在Nexus 10上注意到使用路径绘制时速度非常慢(<10 FPS),而使用drawLines则更加流畅。这是否是某种实现错误或者可能有某个参数可以加速这个过程?目前,由于性能太弱,我无法使用drawPath()。

3个回答

2
我也遇到了drawPath的问题(尤其是在我的Nexus 10上)。我的问题归结为我设置了一个


strokePaint.setMaskFilter(new BlurMaskFilter(16f, BlurMaskFilter.Blur.NORMAL));

这使得性能非常糟糕。Canvas.drawPath 的执行时间为 45 毫秒。一旦我将其删除,执行时间在 2-4 毫秒之间。


1
刚刚目睹了同样的问题,使用BlurMaskFilter的drawPath表现非常糟糕。即使在现代的Android(API 28)上仍然存在这个问题! - Louis Durand

2

如果您需要多次调用drawPath(),则需要在每次调用drawPath()之前调用path.reset()


0

抱歉无法留下评论。drawPath() 调用了更多的额外方法。Path 是一个对象而不是数组。你能想象出所有这些额外的调用吗?它是一个必须使用 Paint 的方法。对于快速绘制多行并不好用,它更适合于绘画。


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