Android開發輔助代碼段

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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章