#react-native #react-native-svg
#react-native #react-native-svg
Вопрос:
Я пытаюсь анимировать SVG с помощью этого кода:
//create animated path component
const AnimatedPath = Animated.createAnimatedComponent(Path);
P1 = new Animated.ValueXY({x: 0, y: 1});
P2 = new Animated.ValueXY({x: 1, y: 1});
P3 = new Animated.ValueXY({x: 2, y: 1});
path = `M ${this.P1._value} ${this.P1._value} S ${this.P2.x._value} ${this.P2.y._value} ${this.P3.x._value} ${this.P3.y._value}`;
Animated.timing(this.P1, {
toValue: {x: 3, y: 3},
duration: 300,
useNativeDriver: 'true',
}).start();
<Svg height="50%" width="50%" viewBox="0 0 4 4 " fill="blue">
{/* <Path /> */}
{console.log('this.P1.x: ', this.P1.x)}
<AnimatedPath
d={this.path}
// d="M 0 1 S 1 1 2 1"
fill="none"
stroke="red"
/>
</Svg>
но это не работает. Есть ли способ сделать его анимированным?
также должны ли мы использовать react-native-reanimated2?
Ответ №1:
Проверьте документацию reanimated2 для использования animatedprops. Обратите внимание, что документированный пример имеет некоторые недостатки, вот демонстрация:
import { StyleSheet } from 'react-native';
import {
Animated,
useSharedValue,
useAnimatedProps,
withTiming
} from 'react-native-reanimated';
import Svg, { Path } from 'react-native-svg';
const AnimatedPath = Animated.createAnimatedComponent(Path);
function App() {
const radius = useSharedValue(50);
const animatedProps = useAnimatedProps(() => {
// draw a circle
const path = `
M 100, 100
m -${radius}, 0
a ${radius},${radius} 0 1,0 ${radius * 2},0
a ${radius},${radius} 0 1,0 ${-radius * 2},0
`;
return {
d: path
};
});
// attach animated props to an SVG path using animatedProps
return <Svg><AnimatedPath animatedProps={animatedProps} fill="black" onPress={() => radius.value = withTiming(Math.random() * 180)} /></Svg>
}
Я знаю, что вы, вероятно, нашли решение, но я хотел дать ответ людям, которые наткнулись на это.
Комментарии:
1. Я нигде не могу найти решение, но я попробую ваше. Спасибо
2. Какие упомянутые недостатки? Является ли это хуком withTiming, находящимся внутри обработчика onPress или?
3. Я не могу вспомнить, что я имел в виду под недостатками, но этот ответ был написан 2 года назад, когда reanimated2 был в альфа-версии. В документации могли быть упомянуты некоторые оговорки, но в текущих документах они не упоминаются.