android.graphics.Path#approximate ( )源码实例Demo

下面列出了android.graphics.Path#approximate ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: android_9.0.0_r45   文件: PathInterpolator.java
private void initPath(Path path) {
    float[] pointComponents = path.approximate(PRECISION);

    int numPoints = pointComponents.length / 3;
    if (pointComponents[1] != 0 || pointComponents[2] != 0
            || pointComponents[pointComponents.length - 2] != 1
            || pointComponents[pointComponents.length - 1] != 1) {
        throw new IllegalArgumentException("The Path must start at (0,0) and end at (1,1)");
    }

    mX = new float[numPoints];
    mY = new float[numPoints];
    float prevX = 0;
    float prevFraction = 0;
    int componentIndex = 0;
    for (int i = 0; i < numPoints; i++) {
        float fraction = pointComponents[componentIndex++];
        float x = pointComponents[componentIndex++];
        float y = pointComponents[componentIndex++];
        if (fraction == prevFraction && x != prevX) {
            throw new IllegalArgumentException(
                    "The Path cannot have discontinuity in the X axis.");
        }
        if (x < prevX) {
            throw new IllegalArgumentException("The Path cannot loop back on itself.");
        }
        mX[i] = x;
        mY[i] = y;
        prevX = x;
        prevFraction = fraction;
    }
}
 
源代码2 项目: Animer   文件: PathInterpolator.java
private void initPath(Path path) {
    float[] pointComponents = path.approximate(PRECISION);

    int numPoints = pointComponents.length / 3;
    if (pointComponents[1] != 0 || pointComponents[2] != 0
            || pointComponents[pointComponents.length - 2] != 1
            || pointComponents[pointComponents.length - 1] != 1) {
        throw new IllegalArgumentException("The Path must start at (0,0) and end at (1,1)");
    }

    mX = new float[numPoints];
    mY = new float[numPoints];
    float prevX = 0;
    float prevFraction = 0;
    int componentIndex = 0;
    for (int i = 0; i < numPoints; i++) {
        float fraction = pointComponents[componentIndex++];
        float x = pointComponents[componentIndex++];
        float y = pointComponents[componentIndex++];
        if (fraction == prevFraction && x != prevX) {
            throw new IllegalArgumentException(
                    "The Path cannot have discontinuity in the X axis.");
        }
        if (x < prevX) {
            throw new IllegalArgumentException("The Path cannot loop back on itself.");
        }
        mX[i] = x;
        mY[i] = y;
        prevX = x;
        prevFraction = fraction;
    }
}
 
源代码3 项目: FunnyDraw   文件: CurveMotionDrawer.java
private float[] approximate(Path path) {
    float[] points = null;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        points = path.approximate(PRECISION);
    } else {
        try {
            Method method = path.getClass().getDeclaredMethod("approximate", float.class);
            method.setAccessible(true);
            points = (float[]) method.invoke(path, PRECISION);
        } catch (NoSuchMethodException | InvocationTargetException| IllegalAccessException e) {
            // impossible
        }
    }
    return points;
}
 
源代码4 项目: android_9.0.0_r45   文件: PathKeyframes.java
public PathKeyframes(Path path, float error) {
    if (path == null || path.isEmpty()) {
        throw new IllegalArgumentException("The path must not be null or empty");
    }
    mKeyframeData = path.approximate(error);
}