Android开发辅助代码段
把Path分解成座标点数组
java代码如下:
/** * 分解Path * * @return Path上的全部座标点 * @precision 精确度(分离出来的每一个点有多大),取值0-1 */
private float[] decomposePath(Path path, int precision) {
if (path.isEmpty()) {
return new float[0];
}
PathMeasure pathMeasure = new PathMeasure(path, false);
final float pathLength = pathMeasure.getLength();
if (precision <= 0) {
precision = 1;
}
int numPoints = (int) (pathLength / precision) + 1;
float[] points = new float[numPoints * 2];
final float[] position = new float[2];
int index = 0;
float distance;
for (int i = 0; i < numPoints; ++i) {
distance = (i * pathLength) / (numPoints - 1);
pathMeasure.getPosTan(distance, position, null);
points[index] = position[0];
points[index + 1] = position[1];
index += 2;
}
return points;
}
//调用:
float[] points = decomposePath(mRipplePath, precision);
kotlin代码如下:
private fun decomposePath(path: Path, precision: Int): FloatArray {
if (path.isEmpty) {
return FloatArray(0)
}
val pathMeasure = PathMeasure(path, false)
val pathLength = pathMeasure.length
val numPoints = (pathLength / precision).toInt() + 1
val points = FloatArray(numPoints * 2)
val position = FloatArray(2)
var index = 0
var distance: Float
for (i in 0 until numPoints) {
distance = i * pathLength / (numPoints - 1)
pathMeasure.getPosTan(distance, position, null)
points[index] = position[0]
points[index + 1] = position[1]
index += 2
}
return points
}
//调用:
val points = decomposePath(ripplePath, precision)