Files
react-native-svg/apps/common/test/Test1845.tsx
Jakub Grzywacz b3b175a7fb feat: move examples to ./apps (#2507)
# Summary

Due to the large number of example apps in the repository, I decided to
change the structure and move all applications into an "apps" folder to
maintain a clear structure.
2024-10-25 16:12:23 +02:00

66 lines
1.6 KiB
TypeScript

import React from 'react';
import {SafeAreaView, useColorScheme} from 'react-native';
import {Svg, Ellipse} from 'react-native-svg';
import Animated, {
createAnimatedPropAdapter,
processColor,
useAnimatedProps,
useSharedValue,
withRepeat,
withTiming,
} from 'react-native-reanimated';
const AnimatedEllipse = Animated.createAnimatedComponent(Ellipse);
const App = () => {
const isDarkMode = useColorScheme() === 'dark';
const offset = useSharedValue(0);
offset.value = withRepeat(withTiming(1.0), -1, true);
const backgroundStyle = {
backgroundColor: isDarkMode ? '#333333' : '#fafafa',
flex: 1,
};
const ellipseAnimatedProps = useAnimatedProps(
() => {
const coordinates = {cx: 50, cy: 50, rx: 40, ry: 40};
return {
cx: coordinates.cx,
cy: coordinates.cy,
rx: coordinates.rx,
ry: coordinates.ry,
stroke: 'rgb(255,0,0)',
fill: 'yellow',
opacity: offset.value,
strokeWidth: 2,
};
},
[],
createAnimatedPropAdapter(
props => {
if (Object.keys(props).includes('fill')) {
props.fill = {type: 0, payload: processColor(props.fill)};
}
if (Object.keys(props).includes('stroke')) {
props.stroke = {type: 0, payload: processColor(props.stroke)};
}
},
['fill', 'stroke'],
),
);
return (
<SafeAreaView style={backgroundStyle}>
<Svg width="100%" height="100%">
<AnimatedEllipse
// {...coordinates}
animatedProps={ellipseAnimatedProps}
/>
</Svg>
</SafeAreaView>
);
};
export default App;