此刻,我正在使用带有硬编码间隔的DashPathEffect绘制下一个圆圈:
float[] intervals = new float[]{ 3, 18 };
DashPathEffect path = new DashPathEffect(intervals, 0);
paint.setPathEffect(path);
… … … …
canvas.drawCircle(x, y, radius, paint);
但这会在圆的起点和终点产生一个非等长的破折号,如下图所示:
我当然可以手动调整它,但这仅适用于一种特定的设备密度,并且在不同的显示密度下会再次产生相同的问题。 等距破折号的计算公式是什么?
答案 0 :(得分:0)
您需要 n 破折号加 n 间距以使总长度与圆的周长相同。以下代码假定您已正确确定要使用的center
点和radius
。
double circumference = 2 * Math.PI * radius;
float dashPlusGapSize = (float) (circumference / NUM_DASHES);
intervals[0] = dashPlusGapSize * DASH_PORTION;
intervals[1] = dashPlusGapSize * GAP_PORTION;
DashPathEffect effect = new DashPathEffect(intervals, 0);
paint.setPathEffect(effect);
canvas.drawCircle(center, center, radius, paint);
例如,我使用了NUM_DASHES = 20
,DASH_PORTION = 0.75f
和GAP_PORTION = 0.25f
,我看到了:
您可以对这些常数使用不同的值,以更改将曲线切成多少个破折号,或破折号/间隙彼此相对的大小(只要添加DASH_PORTION
和GAP_PORTION
最多1
)。
答案 1 :(得分:0)
如果您有不同的身材,可以使用此方法测量自定义路径的长度:
val measure = PathMeasure(path, false)
val length = measure.getLength()