我目前正在研究 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.current
是 null
因此我无法获得 length
我认为我错误地理解了 computeMetrics()
的工作原理。
答案 0 :(得分:1)
我认为您需要遍历 List 并添加每个 length
的 PathMetric
以获得路径长度。
double pathLength = 0;
pm.forEach((contour){
pathLength += contour.length;
});
print(pathLength);
这是因为,就像 computeMetrics()
的文档解释 -
路径由零个或多个轮廓组成。
<块引用>PathMetric 对象描述单个轮廓的属性, 比如它的长度等
此外,computeMetrics()
返回的是单个 PathMetric
的可迭代集合,每个 PathMetric
对应于构成路径的各个轮廓。所以为了得到Path的长度,我们需要将列表中每个List<PathMetric> pm = mPath.computeMetrics().toList();
(轮廓)的长度相加,即{{1}}