Skip to main content

Animated Paths

useAnimatedPath​

The useAnimatedPath hook takes a Skia SkPath object and an animation configuration, and returns a Reanimated "derived value" that will animate the path if its points change.

Example​

import {
CartesianChart,
useLinePath,
useAnimatedPath,
type PointsArray,
} from "victory-native";
import { Path } from "@shopify/react-native-skia";
import DATA from "./my-data";

function MyAnimatedLine({ points }: { points: PointsArray }) {
const { path } = useLinePath(points);
// 👇 create an animated path
const animPath = useAnimatedPath(path);

return <Path path={animPath} style="stroke" color="red" strokeWidth={3} />;
}

export function MyChart() {
return (
<CartesianChart data={DATA} xKey="x" yKeys={["y"]}>
{({ points }) => <MyAnimatedLine points={points.y} />}
</CartesianChart>
);
}
info

Skia can only interpolate (and hence animate) paths with the same number of points. Therefore, animating a path will only work if the number of points stays the same.

If you e.g. add a data point to a path, don't expect the path to animate.

Arguments​

useAnimatedPath has a function signature as follows:

useAnimatedPath(path: SkPath, animConfig: PathAnimationConfig): SharedValue<SkPath>;

path​

An SkPath that is e.g. returned from useLinePath or useAreaPath that should be animated when its points change.

animConfig​

The animConfig argument is where you specify Reanimated options for animating the path and has a type of:

type PathAnimationConfig =
| ({ type: "timing" } & WithTimingConfig)
| ({ type: "spring" } & WithSpringConfig)
| ({ type: "decay" } & WithDecayConfig);

where WithTimingConfig, WithSpringConfig, and WithDecayConfig are types from react-native-reanimated.

Find more information on the specific animation options here: