@Override public void onInitPath(Path outPath) { PathData.toPath(pathData.getAnimatedValue(), outPath); } }
@Override public void onDraw(Canvas canvas, Matrix parentMatrix, PointF viewportScale) { final float matrixScale = getMatrixScale(parentMatrix); if (matrixScale == 0) { return; } final float scaleX = viewportScale.x; final float scaleY = viewportScale.y; tempMatrix.set(parentMatrix); if (scaleX != 1f || scaleY != 1f) { tempMatrix.postScale(scaleX, scaleY); } tempRenderPath.reset(); tempPath.reset(); PathData.toPath(pathData.getAnimatedValue(), tempPath); tempRenderPath.addPath(tempPath, tempMatrix); tempRenderPath.setFillType(getPaintFillType(fillType)); if (clipType == ClipType.INTERSECT) { canvas.clipPath(tempRenderPath); } else { canvas.clipPath(tempRenderPath, Region.Op.DIFFERENCE); } }
PathData.toPath(pathData), propertyXName, propertyYName));
private KyrieDrawable createLapsDrawable() { final KyrieDrawable.Builder builder = KyrieDrawable.builder().viewport(VIEWPORT_WIDTH, VIEWPORT_HEIGHT); for (Polygon polygon : polygons) { builder.child( PathNode.builder() .pathData(PathData.parse(polygon.pathData)) .strokeWidth(4f) .strokeColor(polygon.color)); } for (Polygon polygon : polygons) { final PathData pathData = PathData.parse(TextUtils.join(" ", Collections.nCopies(polygon.laps, polygon.pathData))); final Animation<PointF, PointF> pathMotion = Animation.ofPathMotion(PathData.toPath(pathData)) .repeatCount(Animation.INFINITE) .duration(DURATION); builder.child( CircleNode.builder() .fillColor(Color.BLACK) .radius(8) .centerX(pathMotion.transform(p -> p.x)) .centerY(pathMotion.transform(p -> p.y))); } return builder.build(); }
TypedArrayUtils.getNamedString( a, parser, "pathData", Styleable.PathInterpolator.PATH_DATA); final Path path = PathData.toPath(pathData); if (path.isEmpty()) { throw new InflateException("The path cannot be empty");