HarmonyOS 鸿蒙Next 使用Path2D进行绘制路径卡顿,同样路径使用CanvasRenderingContext2D.beginPath()会快很多

发布于 1周前 作者 bupafengyu 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 使用Path2D进行绘制路径卡顿,同样路径使用CanvasRenderingContext2D.beginPath()会快很多 测试20000条数据,一屏全部绘制,使用Path2D进行绘制路径卡顿

使用context.beginPath()会流畅很多,需要同时绘制多条路径时,使用path时可以创建多个path,一次遍历,多条路径同时设置xy,context.beginPath()则不能同时,只能多次遍历,再设置xy,有没有好的解决方案,path的绘制效率为什么这么低

let path = new Path2D()
for (let i = 0; i < 20000; i++) {
  if(i == 0){
    path.moveTo(x, y)
  } else{
    path.lineTo(x, y)
  }
}
this.context.stroke(path)
  this.context.beginPath()
  for (let i = 0; i < 20000; i++) {
    if(i == 0){
      this.context.moveTo(x, y)
    } else{
      this.context.lineTo(x, y)
    }
  }
  this.context.stroke()

更多关于HarmonyOS 鸿蒙Next 使用Path2D进行绘制路径卡顿,同样路径使用CanvasRenderingContext2D.beginPath()会快很多的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

7 回复

可以使用OffscreenCanvasRenderingContext2D在Canvas上进行离屏绘制,这样可以加快了绘制速度。

更多关于HarmonyOS 鸿蒙Next 使用Path2D进行绘制路径卡顿,同样路径使用CanvasRenderingContext2D.beginPath()会快很多的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


处理不变的数据这样一次性绘制,下次直接加载图片是可以,但是数据是一直在变的,需要完全重新绘制,比如能左右滑动的折线图表,屏幕内能展示的点的数量固定,但是滚动后数据源变了,要重绘,离屏绘制这种应该不适用吧。

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:BV1S4411E7LY/?p=17

同问 楼主有好的方案了吗

没有,现在多次遍历使用的 context.beginPath

大佬们,CanvasRenderingContext2D绘制文字有没有什么优化的方案啊。比如绘制从右往左的文字,每次绘制之都要clearRect一下,视觉效果上感觉怪怪的,有没有其他方案呀。

在HarmonyOS鸿蒙Next系统中,使用Path2D进行绘制路径时出现卡顿,而使用CanvasRenderingContext2D.beginPath()则相对更快,这通常是由于两者在内部实现和优化上的差异导致的。

Path2D对象在HarmonyOS中可能采用了更为复杂的路径处理算法或数据结构,导致在处理复杂路径时效率较低。而CanvasRenderingContext2D.beginPath()则可能针对常见的绘图需求进行了专门的优化,因此在执行速度上更快。

为了解决这个问题,你可以考虑以下方案:

  • 优化Path2D的使用:尽量减少Path2D对象中路径的复杂度,避免使用过多的路径操作指令。
  • 改用CanvasRenderingContext2D:对于性能要求较高的场景,可以优先考虑使用CanvasRenderingContext2D进行路径绘制,利用其更高的绘制效率。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。在这里,你可以获得更专业的技术支持和解决方案。

回到顶部