获取颤动中弧的路径长度

时间:2021-02-08 13:16:01

标签: flutter path metrics

我目前正在研究 Flutter project,我试图了解 computeMetrics() 的工作原理。

安卓

我之前实施了一个 Android 解决方案来处理圆弧,并且它有效。部分实现如下所示:

   final RectF oval = new RectF(centerX - radiusArc, centerY - radiusArc, centerX + radiusArc, centerY + radiusArc);
    mPath.addArc(oval, startAngle, sweepAngle);

    PathMeasure pm = new PathMeasure(mPath, false);
    float[] xyCoordinate = {startPoint.x, startPoint.y};
    float pathLength = pm.getLength();

颤动

现在我试图在 Flutter (.dart) 中复制相同的内容。出于这个原因,我使用以下实现

  final Rect oval = Rect.fromLTRB(centerX - radiusArc, centerY - radiusArc, centerX + radiusArc, centerY + radiusArc);
  mPath.addArc(oval, startAngle, sweepAngle);

  List<num> xyCoordinate = new List<num>(2);
  xyCoordinate[0] = startPoint.x;
  xyCoordinate[1] = startPoint.y;

  List<PathMetric> pm = mPath.computeMetrics().toList();
  double pathLength = pm.iterator.current.length;

我尝试通过几个示例来了解如何获得路径的长度,但是在使用我的实现时,pm.iterator.currentnull 因此我无法获得 length

我认为我错误地理解了 computeMetrics() 的工作原理。

1 个答案:

答案 0 :(得分:1)

我认为您需要遍历 List 并添加每个 lengthPathMetric 以获得路径长度。

double pathLength = 0;
pm.forEach((contour){
  pathLength += contour.length;
});
print(pathLength);

这是因为,就像 computeMetrics() 的文档解释 -

<块引用>

路径由零个或多个轮廓组成。

<块引用>

PathMetric 对象描述单个轮廓的属性, 比如它的长度等

此外,computeMetrics() 返回的是单个 PathMetric 的可迭代集合,每个 PathMetric 对应于构成路径的各个轮廓。所以为了得到Path的长度,我们需要将列表中每个List<PathMetric> pm = mPath.computeMetrics().toList();(轮廓)的长度相加,即{{1}}